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",�"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();