1. 安裝
可以從以下網址下載一個J2EE(j2sdkee-1_3-beta2-win.exe):http://Java.sun.com/j2ee/j2sdkee-beta/index.Html。也許你已裝了舊版的J2EE SDK 產品,假如是,在安裝新下載的J2EE之前請先卸載或刪掉舊版的J2EE SDK。運行j2sdkee-1_3-beta2-win.exe,按安裝步驟安裝好J2EE。這裡假設你的J2EE安裝在:C:j2sdkee1.3 目錄下。
2. 設置環境變量
在運行J2EE SDK之前,你必須設置以下環境變量:
J2EE_HOME - 你的J2EE SDK所安裝的目錄。如本例中的:C:j2sdkee1.3 。
JAVA_HOME - 你的Java 2 SDK 所安裝的目錄。
PATH - 設置為你安裝J2EE SDK目錄下的bin目錄。如本例的的:C:j2sdkee1.3in 。
ClassPath - 增添%J2EE_HOME%libj2ee.jar到ClassPath中。本例中也可寫為:C:j2sdkee1.3libj2ee.jar
3. 運行J2EE
Dos命令行敲入以下命令:
%J2EE_HOME%inj2ee -verbose
顯示以下信息表示運行成功:(不同的版本顯示可能不同)
J2EE server listen port: 1050
Naming service started:1050
Binding DataSource, name = jdbc/EstoreDB, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true
Binding DataSource, name = jdbc/DB2, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true
Binding DataSource, name = jdbc/Cloudscape, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true
Binding DataSource, name = jdbc/InventoryDB, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true
Binding DataSource, name = jdbc/DB1, url = jdbc:cloudscape:rmi:CloudscapeDB;create=true
Binding DataSource, name = jdbc/XACloudscape, url = jdbc/XACloudscape__xa
Binding DataSource, name = jdbc/XACloudscape__xa, dataSource = COM.cloudscape.core.RemoteXaDataSource@330913
Starting JMS service ... Initialization complete - waiting for client requests
Binding : < JMS Destination : jms/Queue , javax.jms.Queue >
Binding : < JMS Destination : jms/Topic , javax.jms.Topic >
Binding : < JMS Cnx Factory : jms/TopicConnectionFactory , Topic , No properties >
Binding : < JMS Cnx Factory : TopicConnectionFactory , Topic , No properties >
Binding : < JMS Cnx Factory : jms/QueueConnectionFactory , Queue , No properties >
Binding : < JMS Cnx Factory : QueueConnectionFactory , Queue , No properties >
Starting web service at port:8000
Starting secure web service at port:7000
Apache Tomcat/4.0-b4-dev
Starting web service at port:9191
Apache Tomcat/4.0-b4-dev
J2EE server startup complete.
啟動成功後,在IE浏 覽 器 中 訪 問 HTTP://localhost:8000 可 以 看 到 默 認 的 主 頁 信 息 。
4. 編寫和運行HelloWorld程序
J2EE應用程序一般使用RMI(遠程方法調用)來完成客戶端與服務器的交互。當然,其間也少不了EJB的作用。本例為一個J2EE應用程序:客戶端向服務器發送一個問候語:“Hello,Remote Object”。服務器收到該問候語後打印該問候語,並返回一字符串作為應答。客戶端收到此應答後打印它。
RemoteInterface.java
/**
* 第一步:
* 定義一個新的接口繼續javax.ejb.EJBObject。新定義的接口中的每一個方法都必須拋出
* java.rmi.RemoteException異常。
*/
public interface RemoteInterface extends javax.ejb.EJBObject
{
public String message(String str)throws java.rmi.RemoteException;
}
RemoteObject.java
/**
* 第二步:
* 定義一個類來實現javax.ejb.SessionBean接口。並在該類中實現在第一步中編寫的接口中所定義的方法。
*/
public class RemoteObject implements javax.ejb.SessionBean
{
public String message(String str)throws java.rmi.RemoteException
{
System.out.println("Remote Object Received From Client: ""+str+"""); //打印(從客戶端)接收到的字符串。
return "Hello,I'm Remote Object,I received your message: '"+str+"'"; //返回一應答字符串。
}
public RemoteObject() {}
public void ejbCreate() {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(javax.ejb.SessionContext sc) {}
}
RemoteHome.java
/**
* 第三步:
* 定義一個類繼續javax.ejb.EJBHome 。
*/
public interface RemoteHome extends javax.ejb.EJBHome
{
RemoteInterface create()throws java.rmi.RemoteException,javax.ejb.CreateException;
}
Client.java
/**
* 第四步:
* 定義客戶端類。
*/
public class Client
{
public static void main(String[] args)
{
try
{
javax.naming.Context initContext=new javax.naming.InitialContext();
Object obj=initContext.lookup("HelloWorld"); //遠程查找,由名字得到對應的對象。
RemoteHome home=(RemoteHome)javax.rmi.PortableRemoteObject.narrow(obj,RemoteHome.class);
RemoteInterface remote=home.create();
String receiveFromRemote=remote.message("Hello,Remote Object!"); //遠程方法調用
System.out.println("Client Received From Remote Object: ""+receiveFromRemote+""");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
假設以上四個Java文件存於C:HelloWorld下,編譯它們如:C:HelloWorld>javac *.java 。
5. 部署應用程序
啟動Application Dopolyment Tool:新開一個Dos窗口,鍵入以下命令,%J2EE_HOME%indeploytool 。該工具啟動速度可能比較慢,要耐心等待。啟動成功後會出現主界面(此時不要關閉Dos窗口)。在該界面中選 擇 File菜 單 ,再選New Application項。在 Application File Name 輸 入 :C:HelloWorldHelloWorld.ear 。在 Application Disply Name 輸 入 你所喜歡的顯示名如:HelloWorld。點 擊 OK,在主界面的樹形結構Files-->Applications下將增加新的一項:HelloWorld。這意味著產生了一個新的應用程序。接下來我們要做的就是部署該應用程序。在主界面的樹形結構下選中HelloWorld,然後再在主界面的File菜單中選取New-->Enterprise Bean,在彈出的名為“New Enterprise Bean - IntrodUCtion”窗口中選取Next跳過第一步,在接下來的一步中,Create New EJB File in Application項中選HelloWorld,在EJB Display Name中填上你喜歡的名字如:Hello World EJB,點擊Edit按鈕,在彈出的窗口中,Start Directory中填:C:HelloWorld,在Available Files中展開樹形結構C:HelloWorld,選取RemoteInterface.class、RemoteObject.class、RemoteHome.class、Client.class四項,點Add按鈕添加,然後按OK確定。此時在Contents框中增加了該四個class。點Next進入下一步。Session項選Stateless,意為不保存session狀態。Enterprise Bean Class選RemoteObject。Enterprise Bean Name中填上你喜歡的名字如:Hello World Bean。Remote Home Interface中選RemoteHome,Remote Interface中選RemoteInterface。選Next進入下一步。接下來的步驟可直接點Finish。這時主界面的樹形結構中Files-->Application-->Hello World中將出現Hello World EJB-->Hello World Bean子項。在主界面的樹形結構下選中Hello World,然後再在主界面的Tools菜單中選取Deploy,將彈出新的窗口名為“Deploy Hello World - Introduction”。Object to deploy中選Hello World,Target server中選localhost,選中Retuen Client Jar,在Client Jar File Name中填上:C:HelloWorldHelloWorldClient.jar。選Next進入下一步,在Application框的JNDI Name框中雙擊並填上HelloWorld,注重必須與Client.java中Object obj=initContext.lookup("HelloWorld")的“HelloWorld”保持一致。點Next進入下一步。點Finish完成。這時將出現Deployment Progress窗口。假如有誤,該窗口將出現異常信息。假如一切正常,點OK便完成了部署工作。
6. 運行應用程序
新開一個Dos窗口。進入C:HelloWorldClasses目錄下運行:C: HelloWorldClasses>java -classpath %J2EE_HOME%libj2ee.jar;.;HelloWorldClient.jar; Client 。運行成功則出現如下信息:Client Received From Remote Object: "Hello,I'm Remote Object,I received your message: 'Hello,Remote Object!'" 。而服務端Dos窗口(j2ee -verbose)中出現如下信息:Remote Object Received From Client: "Hello,Remote Object!" 。
本程序很適J2EE的入門,簡單而明了。本程序由Charly設計編寫,並由其本人多次運行確保無誤。如不能正常運行,請檢查你的環境變量設置是否正確,最好不要直接將以上各命令Copy到Dos窗口中運行,某些字符可能受中文全角字符的影響而不被識別。另外假如某個應用程序部署不成功,可以