本教程向您介紹如何編寫和部署用於訪問 Enterprise JavaBean (EJB) 的簡單應用程序,以及如何訪問建構在 Java EE 5 平臺 (EJB 3.0) 和 J2EE 1.4 平臺 (EJB 2.x) 上的 EJB。
使用 NetBeans IDE 5.5, 您可以創建作爲獨立項目類型的應用程序客戶端。您還可以創建作爲企業應用程序的一部分或獨立應用程序的應用程序客戶端項目。本文使用 NetBeans IDE 5.5 Release。
預計持續時間:30分鐘
教程練習
m 訪問一個遠程接口
入門
前提條件
本教程假定您已經具有了以下技術的一些基本知識或編程經驗:
l Java 編程
l NetBeans IDE
教程所需的軟件
本教程需要在計算機上安裝以下軟件:
l NetBeans IDE 5.5 (下載)。
l Java Standard Development Kit (JDK) version 5.0 或version 6.0 (下載)
l Sun Java System Application Server, Platform Edition 9.0(下載)
本教程需要使用IDE註冊Sun Java System Application Server的本地實例。
創建作爲企業應用程序一部分的應用程序客戶端
首先,我們創建一個名爲EnterpriseAppEE5的Java EE 5企業應用程序。在我們創建企業應用程序的同時,還將創建應用程序客戶端。
創建企業應用程序
- 從主菜單中選擇File - New Project。
- 從Enterprise category中選擇Enterprise Application然後單擊Next。
- 鍵入EnterpriseAppEE5作爲項目並設置Sun Java System Application Server的服務器。
- 將Java EE Version設置爲Java EE 5,然後選擇Create EJB Module和Create Application Client Module(可任選一個)。您可以取消選中Create Web Application Module,因爲本教程不需要網絡模板。
- 單擊Finish。
在企業應用程序中創建會話Bean
現在我們在EJB模塊中創建SessionBean EJB bean。要創建該SessionBean,需執行以下操作:
- 右鍵單擊Project窗口中的EnterpriseAppEE5-ejb EJB模板,然後選擇New > File/Folder打開New File嚮導。
- 從Enterprise category中選擇Session Bean,然後單擊Next。
- 鍵入SessionBean作爲EJB名稱,鍵入ejb作爲包。
- 選擇Stateless作爲Session Type,然後選擇Remote作爲創建接口的類型。(您可以取消選中本地接口,因爲本教程只使用遠程接口。)單擊Finish。
當單擊Finish時,bean類SessionBean.java在Source Editor中打開。
- 在Source Editor中單擊右鍵,選擇EJB Methods > Add Business Method生成bean的一個業務方法。
- 在Add Business Method對話框中,鍵入getResult作爲名稱,將Return Type設置爲String,然後選擇遠程和本地接口框。單擊OK。
- 在SessionBean.java中,將getResult方法修改爲:
public String getResult() {
return "This is EJB 3.0 Bean";
}
- 保存更改。
從應用程序客戶端中調用會話Bean
現在我們將代碼添加到用於調用EJB bean的應用程序客戶端中。要修改應用程序客戶端,需執行以下操作:
- 在Projects窗口中展開EnterpriseAppEE5-app-client > Source Packages > enterpriseappee5,然後雙擊Main.java打開Source Editor中的文件。
- 在Source Editor中右鍵單擊,然後選擇Enterprise Resources >Call Enterprise Bean。
- 在Call Enterprise Bean對話框中,選擇SessionBean作爲要調用的bean並選擇Remote 作爲Referenced Interface。單擊OK。
當您單擊OK時,以下注釋被添加到Main.java中以調用會話bean:
@EJB
private static SessionRemote sessionBean;
- 利用以下代碼修改main方法,生成一些簡單輸出。我們將使用System.err.println,以便能輕鬆的在Output窗口中查看消息。
System.err.println("result=" + sessionBean.getResult());
- 保存更改。
配置企業應用程序
現在幾乎所有事情都已經完成了,我們需要做的最後一件事就是設置作爲模塊的應用程序客戶端,它應該在您運行企業應用程序時運行。要配置企業應用程序,需執行以下操作:
- 右鍵單擊Projects窗口中的EnterpriseAppEE5企業應用程序項目節點,並選擇Properties。
- 在Project Properties對話框中選擇Run。
- 選擇EnterpriseAppEE5-app-client作爲Client Module URI(默認情況下應該選擇它)。單擊OK。
運行企業應用程序
現在我們可以運行企業應用程序測試應用程序客戶端。
1. 右鍵單擊Projects窗口中的EnterpriseAppEE5,然後選擇Run。
當您運行項目時,IDE構建並部署應用程序。以下消息出現在Output窗口中:
result = This is EJB 3.0 Bean
使用獨立應用程序客戶端訪問EJB
在本練習中,我們創建一個EJB模塊項目,然後創建與EJB連接的應用程序客戶端項目。
我們不能使用EJB註釋將EJB鏈接到應用程序客戶端中,因此我們將使用上下文查找。如果您擁有一個以上的遠程接口, bean查找代碼是不同的,那麼我們將本練習分爲兩部分:
訪問一個遠程接口
在本練習中,我們創建一個具有遠程接口的EJB模塊,然後創建訪問EJB的應用程序客戶端。
創建EJB模塊
在本練習中,我們創建名爲EJBModule30的EJB模塊。
- 從主菜單中選擇File > New Project。
- 從Enterprise category中選擇EJB Module,然後單擊Next。
- 鍵入EJBModule30作爲項目名稱,並設置Sun Java System Application Server的服務器。
- 將Java EE Version設置到Java EE 5中。
- 單擊Finish。
在EJB模塊中創建會話Bean
在本練習中,我們將在EJB模塊中創建Bean30 EJB。要創建Bean30,需執行以下操作:
- 右鍵單擊Project窗口中的EJB模塊,然後選擇New > File/Folder打開New File嚮導。
- 從Enterprise category中選擇Session Bean,然後單擊Next。
- 鍵入Bean30作爲EJB名稱,鍵入ejb作爲包,保持Session Type爲Stateless不變,然後勾選Remote創建遠程接口。單擊Finish。
當單擊Finish時,bean類Bean30Bean.java在Source Editor中打開。
- 在Source Editor中右鍵單擊源代碼,從彈出窗口中選擇EJB Methods > Add Business Method,生成bean的一個業務方法。在Add Business Method對話框中,鍵入getResult作爲方法名稱,將Return Type設置爲String,確保勾選了Remote接口框,然後單擊OK。
- 在Bean30Bean.java中,修改getResult方法的返回內容,以便其他組件可訪問該方法:
public String getResult() {
return "This is EJB 3.0 Bean";
}
- 修改@Stateless會話bean註釋,以更換用於映射bean的默認名稱。我們想要更改從Bean30Bean到Bean30的映射名稱。然後我們將使用Bean30查看應用程序客戶端的bean。現在註釋應該看起來如下所示(更改黑體部分):
@Stateless(mappedName="Bean30")
public class Bean30Bean implements Bean30Remote {
- 保存更改。
創建應用程序客戶端項目
現在我們創建將訪問EJB的應用程序客戶端ApplicationClientForTest。
- 從主菜單中選擇File > New Project。
- 從Enterprise category中選擇Enterprise Application Client,後單擊Next。
- 鍵入ApplicationClientForTest作爲項目名稱,並設置Sun Java System Application Server的服務器。
- 將Java EE Version設置到Java EE 5中。
- 單擊Finish。
從應用程序客戶端中調用EJB
現在我們將EJBModule30項目添加到作爲庫的ApplicationClientForTest中,並添加訪問Bean30的代碼。
- 右鍵單擊Projects窗口中的ApplicationClientForTest項目節點,並選擇Properties。
- 在Project Properties對話框中,選擇Libraries類,然後單擊Add Project。
- 找到並選擇EJBModule30項目,單擊Add Project JAR Files,然後單擊OK。
單擊OK即可將EJBModule30的JAR文件添加到ApplicationClientForTest庫中。通過在Projects窗口中展開項目的Libraries節點,您可以看到項目庫。
- 雙擊Projects窗口中的Main.java打開Source Editor中的文件。
- 在Source Editor中,將以下代碼添加到Main.java的main方法中。我們將再次使用System.err.println,以便輕鬆看到Output窗口中的消息。
InitialContext ctx = new InitialContext();
Bean30Remote br = (Bean30Remote) ctx.lookup("Bean30");
System.err.println("EJB message is:" + br.getResult());
- 修改導入語句(Alt-Shift-F)。
- 修改代碼中的錯誤。您可以使用IDE中的建議功能幫助您。
注:在這種情況下,錯誤是由遺漏的throws子句引起的。爲了使用IDE的建議功能,在包含錯誤的代碼第一行中插入光標,在其下畫紅線強調。當“建議燈泡”圖標在左側出現時,單擊燈泡並選擇 “Add throws clause...” 將throws子句添加到方法中。IDE在將throws子句添加到方法中後,添加適當的import語句。
8. 保存更改。
現在萬事俱備,可以將EJBModule30和ApplicationClientForTest部署到服務器中了,請右鍵單擊Projects窗口中每個項目的項目節點,並選擇Deploy Project。部署完兩個項目之後,右鍵單擊Projects窗口中的ApplicationClientForTest,並選擇Run Project運行應用程序客戶端。在Output窗口中,我們應該看到如下所示消息:
EJB message is: This is EJB 3.0 Bean
注:如果使用防火牆,您可能需要禁用防火牆,以允許應用程序客戶端訪問EJB。
訪問兩個或多個遠程接口
在本練習中,我們在EJBModule30中創建第二個遠程接口。然後我們修改應用程序客戶端中的代碼,以便它可以訪問每個接口。我們在本練習中用來調用EJB的代碼與調用一個遠程接口時所用代碼略有不同。本練習幫助您學習如何處理從一個獨立應用客戶端訪問兩個或多個遠程接口時的情況。
爲Bean30 EJB創建第二個遠程接口
在本練習中,我們爲Bean30 EJB創建名爲Bean30Remote2的第二個遠程接口。
要創建第二個接口,需執行以下操作:
- 右鍵單擊Projects窗口中的EJB模塊並選擇New > Java class。
- 鍵入Bean30Remote2作爲類名稱,鍵入ejb作爲包,然後單擊Finish。
當單擊Finish時,bean類Bean30Remote2.java在Source Editor中打開。
- 將@Remote註釋添加到類中,聲明作爲遠程接口的類。
- 修改接口定義,並通過以下更改(粗體部分)添加getResult方法:
@Remote
public interface Bean30Remote2 {
String getResult2();
}
5. 修改import語句。您將需要導入javax.ejb.Remote。
- 保存更改。
修改Bean30 Bean實現接口
在本練習中,我們修改Bean30以實現接口Bean30Remote2。
- 在Bean30Bean.java中,實現Bean30Remote2.java中的getResult2方法。該方法應該看起來如下所示:
public String getResult2() {
return "This is EJB 3.0 Bean 2";
}
- 修改類定義以實現Bean30Remote2。
該類現在應該看起來如下所示:
目錄結構如下所示:
修改ApplicationClientForTest
接下來,我們修改應用程序客戶端Main類中的查找代碼。
- 雙擊Projects窗口中的Main.java類的ApplicationClientForTest,以打開Source Editor中的類。
- 修改main方法中的代碼以查找第二個接口。在這種情況下,當有一個以上的遠程接口時,我們必須使用全稱查找每個接口。
InitialContext ctx = new InitialContext();
Bean30Remote br = (Bean30Remote) ctx.lookup("Bean30#ejb.Bean30Remote");
System.err.println("EJB 3.0 result:" + br.getResult());
Bean30Remote2 br2 = (Bean30Remote2) ctx.lookup("Bean30#ejb.Bean30Remote2");
System.err.println("EJB 3.0 result 2:" + br2.getResult2());
- 修改import語句,爲ejb.Bean30Remote2添加一個import語句。
- 保存更改。
現在重新部署EJBModule30,並運行應用程序客戶端。在Output窗口中,您將看到以下輸出:
EJB 3.0 result: This is EJB 3.0 Bean
EJB 3.0 result: This is EJB 3.0 Bean 2
總結
在本練習中,我們爲您介紹瞭如何使用應用程序客戶端訪問EJB 3.0 Enterprise JavaBeans,以及如何從企業應用程序中的應用程序和獨立應用程序客戶端訪問EJB。此外,我們還示範了調用具有一個遠程接口bean和具有一個以上遠程接口bean的區別。
使用獨立應用程序客戶端訪問EJB(EJB 2.1)
如果您想使用EJB 2.X beans工作,流程非常相似,但不完全相同。在本練習中,我們將爲您介紹訪問EJB 2.x beans與訪問EJB 3.0 beans有何不同。
創建EJB模塊EJBModule14
首先,我們創建EJB模塊。
- 從主菜單中選擇File> New Project。
- 從Enterprise category中選擇EJB Module,然後單擊Next。
- 鍵入EJBModule14作爲項目名稱,並設置Sun Java System Application Server的服務器。
- 將Java EE Version設置到J2EE 1.4中。
- 單擊Finish。
在EJBModule14中創建會話Bean
現在我們在EJB模塊中創建Bean14 EJB bean。要創建Bean14,需執行以下操作:
- 右鍵單擊Project窗口中的EJB模塊,然後選擇New > File/Folder打開New File嚮導。
- 從Enterprise category中選擇Session Bean,然後單擊 Next。
- 鍵入Bean14作爲類名稱,鍵入ejb作爲包,保持Session Type爲Stateless不變,然後勾選Remote創建遠程接口。單擊Finish。
當單擊Finish時,bean類Bean14Bean.java在Source Editor中打開。
- 在Source Editor中右鍵單擊源代碼,從彈出菜單中選擇EJB Methods > Add Business Method,打開Add Business Method對話框。
- 在Add Business Method對話框中,鍵入getResult作爲業務方法名稱,將Return Type設置爲String,並選擇Remote作爲接口。單擊OK。
- 修改Bean14Bean.java中的getResult方法,以使返回方法訪問其他組件的bean:
public String getResult() {
return "This is EJB 1.4 Bean";
}
- 保存更改。
從應用程序客戶端中調用EJB
現在我們將EJBModule14項目添加到ApplicationClientForTest中作爲庫,並添加訪問Bean14的代碼。
- 右鍵單擊Projects窗口中的應用程序客戶端項目,並選擇Properties。
- 在Project Properties對話框中,選擇Libraries類,然後單擊Add Project。
- 找到並選擇EJBModule14項目,單擊Add Project JAR Files,然後單擊OK。
單擊OK時即可將EJBModule14的JAR文件添加到ApplicationClientForTest庫中。通過在Projects窗口中展開項目的Libraries節點,您可以看到項目庫。
- 雙擊Projects窗口中的Main.java打開Source Editor中的文件。
- 在Source Editor中,移除或註釋掉用於訪問EJBModule30的代碼,並將以下代碼添加到Main.java的main方法中。
Object remote = ctx.lookup("ejb/Bean14Bean");
Bean14RemoteHome sbrh = (Bean14RemoteHome) PortableRemoteObject.narrow(remote, Bean14RemoteHome.class);
Bean14Remote sbr = sbrh.create();
System.err.println("EJB 1.4 result:" + sbr.getResult());
- 修改import語句。
- 修改源代碼中的錯誤。有錯誤是因爲方法需要throws子句處理NamingException、CreateException和查找時的RemoteException。您可以使用IDE建議功能幫您處理錯誤。
現在萬事俱備,可將EJBModule14和ApplicationClientForTest部署到服務器上(右鍵單擊項目並選擇Deploy Project和Run Project),然後運行客戶端。當運行客戶端時,我們應該在Output窗口中看到以下消息:
EJB 1.4 result: This is EJB 1.4 Bean
下一步
如需有關使用NetBeans IDE 5.5開發Java EE應用程序的更多信息,請參見以下資源:
本文英文地址:
http://www.netbeans.org/kb/articles/appclient-entappclient.html