建立J2EE應用
你不能夠直接將企業組件(EJB)部署到J2EE伺服器,必須將組件加到一個J2EE 應用中然後再部署。在本節,你將建立一個叫做ConverterApp的新J2EE應用並儲存為ConverterApp.ear。
1. 在命令列提示符下啟動J2EE伺服器:
j2ee ?verbose
(停止伺服器命令 j2ee -stop.)
2. 在另一個終端視窗運行部署工具:
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
javac -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伺服器沒有運行。 作者Blog:http://blog.csdn.net/zaowei21/