ARTICLE

J2EE to .NET Migration: Quick Tips

Posted by Vivek Devarajan Articles | Java and .NET March 26, 2003
Here are some Quick tips to get you started, in case you need to migrate a J2EE based application to a .NET based application.
Reader Level:

Here are some Quick tips to get you started, in case you need  to migrate a J2EE based application to a .NET based application.      

We approach the migration tier wise. Firstly, a technology mapping between both the platforms

 

 

 

 


 

 

 

 

 


Continue...

Service/Feature .NET J2EE
GUI WinForms SWING / AWT
Web GUI ASP/ASP.NET JSP
Web Scripting ISAPI, HttpHandler Servlet, Filter, HttpModule
Server Side Business Logic Component Serviced Component (COM+) EJB Session Beans
Server Side Data Component Server components with DB logic EJB BMP Entity Beans with DB Logic
Naming ADSI JNDI
Remote Invocation .NET Remoting RMI / RMI-IIOP
Data Access ADO.NET JDBC, SQL/J
Messaging MSMQ JMS
Transactions COM+ / MTS JTA

Highlights of the migration strategy

  • Presentation Tier JSP -> ASP.NET
  • Business Logic Tier EJB -> COM+ (.NET Enterprise Service)
  • Data Access Tier JDO/JDBC -> ADO.NET

1. Presentation tier migration

a) JSP -> ASP.NET (sample code snippets) :-

JSP Scriptlet :-

<!--Scriptlet-->
<%for (int i=0;i<3;i++){
out .println(i+"<br>" );
}
%>

ASP .NET scriptlet :-

<!--Scriptlet--> <% for(int i=0; i<3; i++){
Response.Write(i +"<br>"); }
%>

JSP Expression :-

<%=new java.math.BigDecimal(10.1).negate()%>

ASP .NET Expression :-

<%=System.Decimal.Negate(new System.Decimal(10.1))%>

JSP Declaration :-

<%!
public String foo(){
return "foo";
}
%>

ASP .NET Declaration :-

<script runat="server" language="c#">
public virtual System.String foo()
{
return "foo";
}
</script>

b) Implicit objects :-

JSP ASP .NET
application Application
session Session
request Request
response  Response
out Response.Write

c) Cookies :-

Creating a cookie and setting its expiry time.

Code in J2EE :-

<%
Cookie userCookie = new Cookie("user", "uid123");
userCookie.setMaxAge(60*60*24*365); // 1 year
response.addCookie(userCookie);
%>

Code in .NET :-

<% System.Web.HttpCookie userCookie = new System.Web.HttpCookie("user",&#0;"uid123");
System.DateTime dateTime = System.DateTime.Now;
System.TimeSpan timeSpan = new System.TimeSpan(0, 0, 60*60*24*365); // 1 year
cookie.Expires = dateTime.Add(timeSpan);
Response.Cookies.Add(userCookie);
%>

d) Beans :-

Java code :-

public class bean1 {
private String text = "Hello";
public bean1 (){
}

public String getText() {
return this.text;
}

public String setText(String text) {
this.text = text;
}
}

C# Code :-

using System;
public class bean1
{
virtual public System.String Text
{
get
{
return this.text;
}
set
{
this.text = value;
}
}
private System.String text = "Hello";
public bean1()
{
}
}

e) converting Servlets to ASP .NET code behind :-

Servlet sample code :-

import javax.servlet.*;
import javax.servlet.http.*;
public class SimpleServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,
java.io.IOException {
response.setContentType("text/html");
java.io.PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("Simple Servlet Body");
out.println("</body></html>");
out.close();
}
}

ASP .NET Code Behind sample :-

using System;
using System.Web;
using System.Web.UI;
public class SimpleServlet : System.Web.UI.Page
{
private void Page_Load(object sender,
System.EventArgs
{
Response.ContentType="text/html";
Response.Write("<html><body>");
Response.Write("Simple Servlet Body");
Response.Write("</body></html>");
}
}

f) Tag Library :-

JSP ASP .NET
Tag Handler Class ASP.NET Web User Controls
JSP Tag Library Descriptor ASP.NET Web Custom Control
JSP taglib Directive

JSP tag lib Sample code :-

<!- JSP -->
<!- the source file is specified in the TLD-->
<%@ taglib uri="taglib.tld" prefix="tags" %>
<tags:sample />

ASP .NET tag lib Sample code :-

<!- ASP .Net -->
<%@ Register TagPrefix="tags" TagName="sample" src="ExampleTag.ascx" %>
<tags:Sample id="mySample" runat="server"> </tags:Sample>

g) Converting Java Applets to .NET Winforms control

Applet code :-

package HelloWorldPackage;
public class HelloWorld extends Applet
{
public void paint(Graphics g) {
g.drawString(getParameter("parameter1"), 25, 25);
}
public void init() {}
public void start() {}
public void stop() {}
}

.NET Winforms code :-

namespace HelloWorldPackage
{
public class HelloWorld :System.Windows.Forms.UserControl
{
String parameter1;
bool isActive;
public HelloWorld()
{
init();
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawString(parameter1,Font,
new SolidBrush(ForeColor),25,25);
}
public void init()
{
this.GotFocus += new System.EventHandler(this.helloWorldControl1_Start);
this.LostFocus += new System.EventHandler(this.helloWorldControl1_Stop);
}
}

2. Business tier migration

Migrating EJB to .NET Serviced Component

a) EJB code :- (Session bean)

public class TellerBean implements SessionBean {
public void ejbCreate() {}
public void ejbRemove() throws
RemoteException {}
public void ejbActivate() throws RemoteException {}
public void ejbPassivate() throws RemoteException {}
public String getData()
}

.NET code :- (serviced component corresponding to the java session bean)

[Transaction(TransactionOption.Required)]
public class TellerBean : System.EnterpriseServices.ServicedComponent
{
public void Create() {}
virtual public System.String Data
{
get{...} }
protected override void Activate(){}
protected override void Deactivate(){ }
protected void Remove
{
this.Deactivate();
this.Dispose();
}
}

b) EJB Code :- (Entity Bean)

public class AccountEntity implements EntityBean {
private string accountID;
private int balance;
public get_accountID() { ... };
public get_balance() { ... };
public set_balance(int amount) { ... };
}
public class AccountProcess implements EntityBean {
public AccountEntity[] Inquiry() { ... };
public void Insert(AccountEntity account) {
string strQuery = "SELECT * FROM tb_account"; 
...
};
public void Update(AccountEntity account) { ... };
public void Delete(string accountID) { ... };
}

.NET Code :- (serviced component corresponding to the java entity bean)

[Transaction(TransactionOption.Required)]

public struct AccountEntity
{
private string accountID;
private int balance;
public AccountID { get{...}; }
public Balance { get{...}; set {...}; }
}
// dsAccount.xsd
public class dsAccount : System.Data.DataSet
{
...
}
public class AccountProcess : System.EnterpriseServices.ServicedComponent
{
public dsAccount Inquiry() { ... };
public void Insert(AccountEntity account)
{
DBAgent.ExecuteNonQuery("sp_getAccount", paramArray, ...);
...
};
public void Insert(string accountID, int balance, ... ){ ... }; // Alternative
}
Create Procedure sp_getAccount ( @accountID
char(8), @balance int , ... )

c) Business Client Tier

Java Code :-

<%
try{
Context ctx = new InitialContext();
Object ref = ctx.lookup("TellerHome");
tellerHome = (TellerHome)
PortableRemoteObject.narrow(ref,
TellerHome.class);
teller = tellerHome.create();
out.println(teller.getData());
}
catch(Exception ex) {
out.println(ex.getMessage());
}
%>

.NET Code :-

<%
myPackage.TellerBean teller =
new myPackage.TellerBean();
Response.Write(teller.Data);
%>

3) Data tier migration :-

a) Database connection :-

Java :- (JDBC)

Class.forName("com.ms.jdbc.odbc.JdbcOdbcDriver");
dbUrl = "jdbc:odbc:ADOTEST";
conn = DriverManager.getConnection(dbUrl,"sa","");

.NET (ADO .NET)

dbUrl = "Provider=SQLOLEDB;Data Source=dbserver;Initial Catalog=Master;"
System.Data.OleDb.OleDbConnection temp_Connection;
temp_Connection =
new System.Data.OleDb.OleDbConnection(dbUrl);
temp_Connection.Open();
conn = temp_Connection;

b) Statement object :-

Java :- (JDBC)

Statement s = conn.createStatement();
createTableBooks = "SELECT count(au_lname) as nrows FROM authors";
ResultSet rs = s.executeQuery(createTableBooks);

.NET (ADO .NET)

System.Data.OleDb.OleDbCommand s = SupportClass.TransactionManager.manager.CreateStatement(conn);
createTableBooks = "SELECT count(au_lname) as nrows FROM authors";
ls.CommandText = createTableBooks;
System.Data.OleDb.OleDbDataReader rs = s.ExecuteReader();

Login to add your contents and source code to this article
comments
COMMENT USING
PREMIUM SPONSORS
Infragistics is experts in technology and design, and passionate about helping you build highly performant and stylish applications that solve problems, deliver inspiration, and maximize results.
HTML 5 + JQUERY CONTROLS
SPONSORED BY
  • PDF reports have never been easier to create. With our included WYSIWYG Designer, you can layout your reports, set up your data source and let DynamicPDF ReportWriter do the rest.