實例教程:J2EE編程起步

文章來源:pconline 作者:胡德平

  爲了幫助國內J2EE初學者,將J2EE部分文檔進行編譯,期望能夠對廣大Java愛好者有所幫助。
  
  本文將通過簡單例子,描述如何利用EJB開發、部署和運行一個客戶機/服務器應用。例子的客戶端作爲Java獨立應用運行,由ConverterClient.java類實現。它實現一個簡單的實時會話,主要通過客戶端應用調用服務器端EJB類ConverterEJB.java來實現。如果你已經安裝了J2EE,則可以在doc/guides/ejb/examples/converter目錄中找到這些例子。

  爲了實現本文所描述的簡單例子,你需要完成以下任務:

  編寫和編譯EJB程序

  創建J2EE應用

  打包EJB(.jar)

  部署J2EE應用

  編寫和編譯客戶端程序

  運行客戶端

  下面章節我們將就上述工作任務以及所涉及的知識點進行簡單闡述。

  前提

  實現本文提供例子的前提是您安裝了Javasoft.com或相關操作系統廠商網站下載的J2SE SDK,以及安裝了相應操作系統版本的J2EE SDK(www.javasoft.com下載)並進行了正確配置。關於J2SE和J2EE的安裝、配置和其它進一步信息,請參閱產品相關文檔。

  EJB編碼

  每個EJB程序必須要求編寫下述代碼:

  遠程接口(Remote interface )

  本地接口(Home interface )

  實現組件(Enterprise bean class )

  遠程接口編碼

  遠程接口定義了客戶端能夠調用的商業方法,這些商業方法是有服務器端的企業組件實現的,本文所涉及的Converter.java編碼如下:

import javax.ejb.EJBObject;//引入必須的包
import java.rmi.RemoteException;
public interface Converter extends EJBObject {//必須繼承EJBObject類
/*定義客戶端可以調用的方法*/
public double dollarToYen(double dollars) throws RemoteException;
public double yenToEuro(double yen) throws RemoteException;
}

  本地接口編碼

  本地接口定義了員徐客戶端創建、查找或移動EJB的方法,本文所涉及的本地接口類ConverterHome接口只定義了一個create方法,返回遠程接口類型,編碼如下:
import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface ConverterHome extends EJBHome {
Converter create() throws RemoteException, CreateException;
}

  企業組件類(EJB)編碼

  本文中的企業組件(EJB)是一個無狀態會話組件,命名爲ConverterEJB.java,該組件實現了兩個商業方法:dollarToYen和yenToEuro,與遠程接口Converter所定義客戶端可訪問方法一致,該類編碼如下:
import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class ConverterEJB implements SessionBean {
public double dollarToYen(double dollars) {
return dollars * 121.6000;
}

public double yenToEuro(double yen) {
return yen * 0.0077;
}

public ConverterEJB() {}
public void ejbCreate() {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}
}

  編譯EJB

  現在需要對上述三個類進行編譯,在UNIX平臺和NT/9X平臺上的編譯略有區別,分別如下編譯:

  UNIX:

1. 在下面的腳本compileEJB.sh中,將該成實際J2EE安裝目錄。
#!/bin/sh
J2EE_HOME=
CPATH=.:$J2EE_HOME/lib/j2ee.jar
javac -classpath "$CPATH" _
ConverterEJB.java ConverterHome.java Converter.java

2. 運行compileEJB.sh 腳本

Windows:

a. 在下面的compileEJB.bat批處理文件中,將該爲實際J2EE安裝目錄。
set J2EE_HOME=
set CPATH=.;%J2EE_HOME%/lib/j2ee.jar
javac -classpath %CPATH% ConverterEJB.java ConverterHome.java Converter.java

b. 運行批處理文件compileEJB.bat。

創建J2EE應用

你不能夠直接將企業組件(EJB)部署到J2EE服務器,必須將組件加到一個J2EE 應用中然後再部署。在本節,你將創建一個叫做ConverterApp的新J2EE應用並保存爲ConverterApp.ear。

a. 在命令行提示符下啓動J2EE服務器:

j2ee ?verbose

(停止服務器命令 j2ee -stop.)

b. 在另一個終端窗口運行部署工具:

deploytool

(按F1獲取部署工具幫助)

3. 創建新的J2EE應用

a. 在部署工具中選擇“文件”菜單

b. 從“文件”菜單中選擇“新應用”

c. 點擊瀏覽

d. 在文件選擇框中定位存放.ear文件的目錄

e. 文件命名爲ConverterApp.ear.

f. 點擊“新應用”

g. 點擊“確定”

企業組件(EJB)打包

本部分你將運行部署工具的創建EJB嚮導來完成下述任務:

創建組件部署描述符

將描述符和組件類打包爲.jar文件

將EJB.jar文件打包到J2EE應用ConverterApp.ear 文件

從“文件”菜單中選擇創建EJB來開始創建新的EJB,這個嚮導將顯示下面的對話框:

介紹對話框:

a. 閱讀嚮導特性說明文檔

b. 點擊“下一步”

EJB JAR 對話框:

a. 在標有"Enterprise Bean will go in," 的組合框中選擇ConverterApp.

b.在JAR Display Name域輸入ConverterJAR,聲明EJB .jar文件包含該組件,該名字會在樹形應用結構中呈現。

c. 點擊增加內容文本域

d. 在內容編輯對話框頂部,輸入包含.class文件的目錄

e. 選擇該目錄下相關.class加入:Converter.class, ConverterEJB.class, 和ConverterHome.class.

f. 點擊確定

g. 點擊下一步

綜合對話框:

a. 在組件類型中選擇“會話”

b. 選擇“無狀態”

b. 在EJB類組合框中選擇ConverterEJB.

c. 在本地接口組合框中選擇ConverterHome.

d. 在遠程接口組合框中選擇Converter.

e. 在企業組件命名域中輸入ConverterBean.

f. 點擊下一步

環境入口對話框:

因爲你可以跳過後面的對話框,所以可以點擊完成結束創建EJB應用任務。

部署J2EE應用

現在J2EE應用中已經包含企業組件(EJB)了,可以對其進行部署。

1.指定企業組件的JNDI名字

a. 在應用部署波農工具中,在應用樹形結構中選擇ConverterApp

b. 選擇JNDI名字標籤

c. 在JNDI 名字域中,輸入MyConverter並確認。客戶端將使用該名字來定位本地接口。

2.部署J2EE應用

a. 從工具菜單中選擇“部署”

b. 在第一個對話框中選擇ConverterApp爲部署對象,Localhost爲目標服務器

c. 選擇標有"Return Client Jar." 的選擇框

d. 在文本域中敲入ConverterAppClient.jar的確切目錄,如J2EE的例子目錄doc/guides/ejb/examples/converter

e. 點擊下一步

f. 在第二個對話框中,覈實ConverterBean 的JNDI命名爲MyConverter.

g.點擊下一步

h. 在第三個對話框中點擊結束

i. 在部署進程對話框中,點擊OK完成部署

開發客戶端

客戶端程序ConverterClient是一個獨立運行的Java應用,創建ConverterClient主要包括以下步驟:

1. 客戶端編碼

2. 客戶端編譯

客戶端編碼

ConverterClient.java 源碼展示了EJB客戶端最基本的任務實現,即:

定位本地接口

創建企業組件(EJB)

調用商業方法

定位本地接口
ConverterHome接口定義了EJB聲明週期方法如create,在中ConverterClient 可以調用create方法之前ConverterHome對象必須被實例化,包括三個步驟:

1. 創建JNDI命名上下文
Context initial = new InitialContext();

2. 查找與JNDI命名MyConverter綁定的對象
java.lang.Object objref = initial.lookup("MyConverter");

3. 限定指向ConverterHome對象的參考

ConverterHome home = (ConverterHome) PortableRemoteObject.narrow(objref,
ConverterHome.class);

創建企業組件(EJB)實例

客戶端通過調用本地接口ConvertHome對象的create方法創建ConverterEJB類對象, create 方法返回組件Converter類型的對象。然後,遠程方法定義的在ConverterEJB實現的商業方法可以被客戶端調用。當客戶端調用create 方法時,EJB容器將實例化ConverterEJB,然後調用ConverterEJB.ejbCreate 方法。

Converter currencyConverter = home.create();

調用商業方法

完成上述任務後,調用商業方法就比較簡單了。你調用Converter對象的方法, EJB容器將相應的調用運行在J2EE服務器中的ConverterEJB 例的方法。客戶端調用商業方法dollarToYen的代碼如下:
double amount = currencyConverter.dollarToYen(100.00);

ConverterClient源碼
下面是ConverterClient.java的完整源碼:
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import Converter;
import ConverterHome;
public class ConverterClient {
public static void main(String[] args) {
try {
Context initial = new InitialContext();
Object objref = initial.lookup("MyConverter");
ConverterHome home =
(ConverterHome)PortableRemoteObject.narrow(objref, ConverterHome.class);
Converter currencyConverter = home.create();
double amount = currencyConverter.dollarToYen(100.00);
System.out.println(String.valueOf(amount));
amount = currencyConverter.yenToEuro(100.00);
System.out.println(String.valueOf(amount));
currencyConverter.remove();
} catch (Exception ex) {
System.err.println("Caught an unexpected exception!");
ex.printStackTrace();
}
}
}

編譯客戶端代碼

UNIX:

1. 在下面腳本compileClient.sh, 對根據J2EE實際安裝目錄作相應改動。
#!/bin/sh
J2EE_HOME=
CPATH=.:$J2EE_HOME/lib/j2ee.jar
java -classpath "$CPATH" ConverterClient.java

2. 運行腳本文件compileClient.sh

Windows:

1. 在下面批處理文件compileClient.bat中,對根據實際J2EE安裝目錄進行修改。

set J2EE_HOME=
set CPATH=.;%J2EE_HOME%/lib/j2ee.jar
javac -classpath %CPATH% ConverterClient.java

2. 運行批處理文件compileClient.bat

運行客戶端

運行客戶端你需要ConverterAppClient.jar文件,該文件包含允許客戶端與EJB容器中EJB實例通信所需的存根類,ConverterAppClient.jar 文件在部署J2EE應用過程中創建。

UNIX:

1. 在下面腳本testClient.sh, 對根據J2EE實際安裝目錄作相應改動。

#!/bin/sh
J2EE_HOME=
CPATH=$J2EE_HOME/lib/j2ee.jar:ConverterAppClient.jar:.
java -classpath "$CPATH" ConverterClient

2. 運行腳本文件testClient.sh

Windows:

1. 在下面批處理文件testClient.bat中,對根據實際J2EE安裝目錄進行修改。

set J2EE_HOME=
set CPATH=.;%J2EE_HOME%/lib/j2ee.jar;ConverterAppClient.jar
java -classpath "%CPATH%" ConverterClient

2. 運行批處理文件 testClient.bat

常見問題處理
當運行ConverterClient 時發現下面錯誤:

1. java.lang.ClassCastException

可能無法找到ConverterAppClient.jar文件。

2. java.lang.NoClassDefFoundError: ConverterClient

無法定位ConverterClient.class 文件。

3. java.lang.NoClassDefFoundError: javax/naming/Context

無法找到所需的j2ee.jar 文件,確認CLASSPATH設置。

4. javax.naming.NameNotFoundException: Lookup of name MyConverter failed.

J2EE服務器無法定位JNDI名字MyConverter所綁定的組件。

5. javax.naming.NamingException: Error accessing repository: Cannot connect to ORB at . . . .

J2EE服務器沒有運行。
(Java研究組織)

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章