將 Java Swing 應(yīng)用程序連接到 Geronimo 服務(wù)器創(chuàng)建可以與 Geronimo EJB 應(yīng)用程序?qū)υ挼莫?dú)立客戶端 ![]() | ![]() |
![]() |
級(jí)別: 初級(jí) Neal Sanche , Java 開發(fā)人員, Pure Technologies 2005 年 8 月 24 日 在前兩篇 developerWorks 文章(參閱 參考資料) 中,作者 Neal Sanche 使用簡單的電話簿應(yīng)用程序來展示如何將 Apache Geronimo 應(yīng)用服務(wù)器連接到數(shù)據(jù)庫,以及如何使用 Geronimo 創(chuàng)建具有 Enterprise JavaBeans (EJB) 后端的基于 Struts 的 Web 應(yīng)用程序。本文進(jìn)一步使用電話簿應(yīng)用程序來展示如何創(chuàng)建獨(dú)立客戶端應(yīng)用程序以操作電話號(hào)碼數(shù)據(jù)庫。您還將學(xué)習(xí)如何配置 Geronimo 以允許來自特定客戶端的安全訪問。 本文將展示如何開發(fā)可以與運(yùn)行在 Geronimo 應(yīng)用服務(wù)器內(nèi)部的 EJB 應(yīng)用程序通信的獨(dú)立(胖)客戶端。基于我的前兩篇文章 ——“將數(shù)據(jù)庫連接到 Geronimo 應(yīng)用服務(wù)器的三種方法”(developerWorks,2005 年 6 月)和“利用 Geronimo 深入 EJB Web 應(yīng)用程序” (developerWorks,2005 年 7 月)—— 本文向您展示一個(gè)連接到使用 Geronimo EJB 應(yīng)用程序構(gòu)建的小型電話簿數(shù)據(jù)庫的 Swing 客戶端。您將閱讀簡要的設(shè)計(jì)說明,然后閱讀有關(guān)運(yùn)行該應(yīng)用程序所需的客戶端庫的信息。接下來我將介紹聯(lián)系服務(wù)器并對服務(wù)器上遠(yuǎn)程無狀態(tài)會(huì)話 bean 執(zhí)行操作的方法。最后,您將學(xué)習(xí)如何開發(fā)、編譯并運(yùn)行客戶端應(yīng)用程序,以及如何配置服務(wù)器以允許來自網(wǎng)絡(luò)中特定客戶端的安全訪問。 要最有效地利用本文,您需要熟悉用于構(gòu)建 Java 桌面應(yīng)用程序的 Java Swing API 以及 Apache Maven 構(gòu)建系統(tǒng)(參閱 參考資料 以鏈接到 Maven Web 站點(diǎn))。
首先簡要介紹一下示例應(yīng)用程序設(shè)計(jì) —— 一個(gè)描述電話簿客戶端應(yīng)用程序的統(tǒng)一建模語言 (Unified Modeling Language, UML) 部署圖 —— 如 圖 1 所示。客戶端應(yīng)用程序通過其 EJB 端口連接到 Geronimo,并與 PhoneBook Session EJB 對話以通過 PhoneBook Entry Container-Managed Persistence (CMP) 操作數(shù)據(jù)庫中的數(shù)據(jù)。 圖 1. 電話簿客戶端部署圖 ![]() Geronimo 的默認(rèn)發(fā)行版對 EJB 端口有限制。僅當(dāng)客戶端應(yīng)用程序運(yùn)行在同一機(jī)器上并且通過環(huán)回地址(localhost 或 127.0.0.1) 連接時(shí)才能連接到該端口。本文稍后的 配置 Geronimo 的 EJB 端口 一節(jié)提供了有關(guān)如何讓其他機(jī)器上的客戶端訪問服務(wù)器的詳細(xì)信息。
要讓客戶端應(yīng)用程序能夠連接到 Geronimo 的 EJB 端口并與 EJB 層通信,客戶端類路徑中必須要有下列 Java 庫:
從源代碼編譯 Geronimo 時(shí),當(dāng)您使用 Maven 構(gòu)建腳本來編譯電話簿客戶端應(yīng)用程序時(shí),這些庫被放置到本地 Maven 資源庫中且可供訪問。您可以在 project.xml 文件的依賴關(guān)系部分中查看所有這些庫位于 Maven 資源庫的哪個(gè)位置。 其中一些庫在客戶端與服務(wù)器的通信中起著非常重要的作用。Geronimo 使用 CGLib 庫來執(zhí)行動(dòng)態(tài)代理生成。這使得服務(wù)器動(dòng)態(tài)生成遠(yuǎn)程調(diào)用服務(wù)器端組件的代碼。如果在調(diào)試器中檢查客戶端上
客
戶端通信部分的實(shí)現(xiàn)十分簡單。將客戶端連接到服務(wù)器時(shí),Geronimo 與其他任何 J2EE 服務(wù)器沒有任何不同,遵守健全的通過 JNDI
查詢和遠(yuǎn)程方法調(diào)用 (RMI) 進(jìn)行的通信標(biāo)準(zhǔn)。JNDI 查詢是獲得對遠(yuǎn)程對象的引用的標(biāo)準(zhǔn)訪問。要通過 JNDI 進(jìn)行連接,必須使用大量特定于
Geronimo 的屬性來創(chuàng)建 清單 1. 創(chuàng)建到 Geronimo 托管會(huì)話 bean 的遠(yuǎn)程會(huì)話
如 清單 1 所示,創(chuàng)建了 前已提及,EJB 端口當(dāng)前只接受從客戶端連接到 127.0.0.1 或 localhost 的連接。默認(rèn)端口是 4201。盡管如此,主機(jī)名和端口都可以進(jìn)行配置。有關(guān)詳細(xì)信息,請參閱 配置 Geronimo 的 EJB 端口 一節(jié)。 創(chuàng)建好屬性之后,就可以創(chuàng)建并使用 具有對遠(yuǎn)程會(huì)話的引用之后,該引用可用于所有操縱電話簿數(shù)據(jù)庫信息的操作?,F(xiàn)在只需要一個(gè)應(yīng)用程序來練習(xí)該遠(yuǎn)程會(huì)話。
現(xiàn) 在我們來深入研究一個(gè)小 Swing 應(yīng)用程序的設(shè)計(jì)和開發(fā),這個(gè)小應(yīng)用程序用來瀏覽、創(chuàng)建、刪除和修改電話簿數(shù)據(jù)庫條目。我盡量將 Swing 行話減到最少,以防您比較熟悉的是另一種 GUI 技術(shù),比如 Standard Widget Toolkit (SWT)。事實(shí)上,如果需要的話,應(yīng)用程序架構(gòu)已經(jīng)使得將顯示從應(yīng)用程序內(nèi)部邏輯分離出來并將其連接到另一種 GUI 技術(shù)變得非常容易。 應(yīng)用程序架構(gòu)如 圖 2 所示,這是一個(gè)詳細(xì)顯示應(yīng)用程序靜態(tài)結(jié)構(gòu)的 UML 類圖。 圖 2. 客戶端應(yīng)用程序的 UML 類圖 ![]() 圖 2 中帶綠色陰影的類是主要的應(yīng)用程序類。 橙色的兩個(gè)接口定義系統(tǒng)中的主要事件。每當(dāng)
如果希望節(jié)省編寫用戶接口代碼的時(shí)間,通??梢栽?Internet 上找到高質(zhì)量的免費(fèi)工具。優(yōu)秀的工具有 JGoodies Forms 1.0.5 和 FormLayoutMaker,F(xiàn)ormLayoutMaker 是一個(gè)用于可視化創(chuàng)建窗體的小工具(參閱 參考資料 以獲得到這些工具的鏈接)。FormLayoutMaker 工具生成代表 JGoodies 窗體布局約束的 XML 文件。這些工具幫助我快速創(chuàng)建了 Phone Number 編輯面板和 Preferences 面板的窗體。
編 譯應(yīng)用程序有兩種方法。我使用 Eclipse Visual Editor (VE) 插件 1.2 版本在 Eclipse 中開發(fā)了該應(yīng)用程序。它生成應(yīng)用程序的大部分代碼框架,但它是以一種非入侵的方式完成的(沒有代碼標(biāo)記和不可訪問的代碼塊),所以如果沒有安裝 VE 的話也應(yīng)該沒有問題??梢灾患虞d項(xiàng)目并嘗試運(yùn)行它。 您可能需要設(shè)置 MAVEN_REPO 構(gòu)建變量以指向本地 Maven 資源庫。還需要構(gòu)建與本文一起提供的源代碼中包括的 Geronimo 和 PhoneBook 服務(wù)器應(yīng)用程序(參閱 下載)。這是因?yàn)?,要編譯客戶端應(yīng)用程序,包含服務(wù)器應(yīng)用程序中 EJB 接口的 .jar 文件必須發(fā)布到本地 Maven 資源庫中。PhoneBook 的 Maven 構(gòu)建腳本通過下列 Maven 構(gòu)建腳本段完成該操作: 清單 2. Maven 構(gòu)建腳本段
用于構(gòu)建應(yīng)用程序的第二種方法就是使用 Maven。在 PhoneBook 目錄中解壓文件并運(yùn)行 maven 命令。然后在 PhoneBookClient 目錄中進(jìn)行相同操作。如果一切順利,就已經(jīng)在目標(biāo)子目錄中創(chuàng)建了 UberJar —— 一個(gè)包含運(yùn)行客戶端所需的所有內(nèi)容的 JAR 文件。 兩種構(gòu)建方法運(yùn)行得同樣好。使用 Maven 方法的優(yōu)點(diǎn)是如果您尚未下載依賴關(guān)系,則它會(huì)自動(dòng)從 ibiblio Web 站點(diǎn)(參閱 參考資料)上的遠(yuǎn)程 Maven 資源庫中下載這些依賴關(guān)系。所以如果 Eclipse 中的依賴關(guān)系有問題,就在項(xiàng)目上至少運(yùn)行一次 Maven 來校正缺少的庫。
確保 PhoneBook 服務(wù)器應(yīng)用程序部署到 Geronimo 服務(wù)器中且正在運(yùn)行。然后鍵入下列命令:
將會(huì)看到應(yīng)用程序彈出,如 圖 3 所示。 圖 3. Geronimo 電話簿客戶端應(yīng)用程序 ![]() 首先,從 File 菜單中選擇 Connect。如果是連接到 localhost:4201 端口,則應(yīng)該獲得一個(gè)連接;否則,控制臺(tái)窗口將會(huì)顯示錯(cuò)誤消息。可以通過選擇 Edit > Preferences、更改信息并嘗試重新連接來更改連接的服務(wù)器和端口。一旦連接上之后,可以通過在電話號(hào)碼編輯器中鍵入姓名和號(hào)碼并單擊 Save 來創(chuàng)建新記錄。該記錄將顯示在姓名列表中。通過選擇條目并單擊 Delete 來刪除條目。通過選擇條目、進(jìn)行修改并單擊 Save 來更改條目。
當(dāng) 前,配置 Geronimo 的 EJB 端口的方法需要編輯 XML 文件,然后重新編譯 Geronimo。Tom McQueeney 的大型 Geronimo Live blog 上的一篇短文清楚介紹了如何使用 openejb\modules\assembly\src\plan\j2ee-server-plan.xml 文件更改 Geronimo Jetty 監(jiān)聽端口的詳細(xì)信息(參閱 參考資料 以鏈接到該 blog)。同一文件還包含 EJB 端口的配置信息(參閱 清單 3)。 清單 3. j2ee-server-plan.xml 文件中的代碼段
您需要編輯 j2ee-server-plan.xml 文件并更改
有 關(guān)服務(wù)器接受的特定模式的詳細(xì)信息,請咨詢源代碼文件 —— ServiceAccessController.java —— 位于來源的 openejb\modules\core\src\java\org\openejb\server 目錄中。在此將會(huì)找到與支持的每個(gè)地址類型相匹配的明確的正則表達(dá)式。 對 j2ee-server-plan.xml 文件進(jìn)行修改之后,重新編譯并更新服務(wù)器部署,您將具有一個(gè)專門滿足您需要的服務(wù)器。(如果只想查看針對同一機(jī)器上的服務(wù)器運(yùn)行的客戶端,則無需這樣做。默認(rèn)情況下,Geronimo 被配置來完成這些操作。)
本 文提供了一個(gè)構(gòu)建獨(dú)立(胖)客戶端的具體示例,該客戶端可以與運(yùn)行在 Geronimo 應(yīng)用服務(wù)器內(nèi)部的 EJB 應(yīng)用程序進(jìn)行對話。Geronimo 團(tuán)隊(duì)已經(jīng)認(rèn)真實(shí)現(xiàn)了健全的標(biāo)準(zhǔn),推廣用簡單的 JNDI 查詢方法獲得與無狀態(tài)會(huì)話 bean 的遠(yuǎn)程連接。如果只想讓簡單的應(yīng)用程序運(yùn)行,那么這是一個(gè)好消息,因?yàn)樗恍枰帉懮倭看a。 按照我所介紹的模式,您能夠?qū)⒃S多比較大的 數(shù)據(jù)庫連接到與 Geronimo 服務(wù)器位于同一機(jī)器上的客戶端應(yīng)用程序。使用本文提供的指示,您還能夠配置 Geronimo 服務(wù)器以允許從連接到您的網(wǎng)絡(luò)或 Internet 上的其他機(jī)器訪問服務(wù)器 EJB 端口。不妨嘗試一下。
|