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