建立用戶端組合
對於簡式 HelloWorld OSGi 應用程式,用戶端軟體組會呼叫 HelloWorldService 服務,並使用它來產生訊息 OSGi Service: Hello World!.
開始之前
關於這項作業
軟體組 (OSGi 模型中的模組單元) 是包含 OSGi 應用程式 meta 資料的 JAR 檔。 這個 meta 資料定義在 JAR 檔 META-INF/MANIFEST.MF的資訊清單檔中。
OSGi 應用程式設計準則 8.5 版提供圖形支援來建立及包裝軟體組。 下列範例程序使用此工具。 您也可以使用其他工具,這些步驟也適用於其他工具。
此範例程序會建置稱為 com.ibm.ws.eba.helloWorld.client的組合。 此組合使用組合 com.ibm.ws.eba.helloWorld.service所匯出的 HelloWorldService 服務,如 建立服務組合中所述。
此作業的示範 (7 分鐘) ![]()
程序
若要建立用戶端組合,請完成下列步驟:
- 建立 OSGi 軟體組專案。
- 按一下 檔案 > 新建 > OSGi 軟體組專案。會顯示「 OSGi 軟體組專案 」畫面。
- 配置專案。
- 在 專案名稱中,輸入 com.ibm.ws.eba.helloWorld.client。
- 清除 新增組合至應用程式 勾選框。 如果您維持選取這個勾選框,會自動建立新的 OSGi 應用程式專案,並將軟體組新增至其中。 不過,在這裡,將在個別作業 建立 OSGi 應用程式中手動建立應用程式專案。
- 保留其他選項作為預設值。
- 按 下一步。即會顯示「 Java 配置 」畫面。 接受此畫面上所有選項的預設值。
- 按 下一步。這時會顯示「 OSGi 軟體組設定 」畫面。 接受此畫面上所有選項的預設值。
- 按一下 完成。
您已建立 OSGi 專案。 - 按一下 檔案 > 新建 > OSGi 軟體組專案。
- 讓 HelloWorldEBA 介面可供用戶端實作組合使用。
編輯用戶端組合資訊清單,使
com.ibm.ws.eba.helloWorld.api套件內的類別可供用戶端實作組合使用。com.ibm.ws.eba.helloWorld.api套件是com.ibm.ws.eba.helloWorld.api組合的一部分。- 展開
com.ibm.ws.eba.helloWorld.client專案 - 使用資訊清單編輯器開啟組合 MANIFEST.MF 檔案。此檔案位於 BundleContent/META-INF 目錄中。
- 按一下 相依關係 標籤。
- 在「 匯入的套件 」窗格中,按一下 新增。
- 在「 選取套件 」對話框中,輸入 com.ibm.ws.eba,從 匯出的套件 清單中選取
com.ibm.ws.eba.helloWorld.api (1.0.0),然後按一下 確定。套件會新增至 匯入的套件 清單。 - 在 匯入的套件 清單中,選取
com.ibm.ws.eba.helloWorld.api套件,然後按一下 內容。 - 在「 內容 」對話框中,將 minimum
version 設為 1.0.0 Inclusive,並將 maximum version 設為 2.0.0 Exclusive,然後按一下 確定。匯入的套件 清單中這個套件的項目會更新為
com.ibm.ws.eba.helloWorld.api [1.0.0,2.0.0)。此版本語法表示
匯出的套件若具有介於 1.0.0 (含) 與 2.0.0 (不含) 之間的版本,將符合此匯入
。 如需版本語法的相關資訊,請參閱 OSGi 服務平台第 4 版 4.2 核心規格 3.2.6版本範圍
一節。已指定此版本範圍,以確保用戶端組合使用套件的更新版本 (如果它在次要版本或微版本的值上不同,但在主要版本上不同) ,因為只有二進位不相容變更 (例如刪除公用方法) 可以導致用戶端組合停止正常運作。
- 儲存並關閉檔案。
- 展開
- 建立類別 HelloWorldClient。
- 在專案來源資料夾中 src,建立稱為
com.ibm.ws.eba.helloWorld.client的套件。 在套件中,建立名為HelloWorldClient的類別,其內容如下:package com.ibm.ws.eba.helloWorld.client; import com.ibm.ws.eba.helloWorld.api.HelloWorldEBA; public class HelloWorldClient { private HelloWorldEBA helloWorldEBAService = null; //a reference to the service public void refHello() { System.out.println("Client: Start..."); helloWorldEBAService.hello(); System.out.println("Client: End..."); } public HelloWorldEBA getHelloWorldEBAService() { return helloWorldEBAService; } public void setHelloWorldEBAService(HelloWorldEBA helloWorldEBAService) { this.helloWorldEBAService = helloWorldEBAService; } }在前一個程式碼區塊中:- 行
HelloWorldEBA helloWorldEBAService = null;定義服務相依關係。 helloWorldEBAService.hello();這一行示範已針對helloWorldEBAService相依關係注入服務。
- 行
- 儲存並關閉檔案。
- 在專案來源資料夾中 src,建立稱為
- 建立藍圖配置。
藍圖配置包含軟體組元件組合和配置資訊。 它也說明如何在 OSGi 服務登錄中登錄元件,或元件如何從 OSGi 服務登錄查閱服務。 這項資訊會在執行時期使用,以便於啟動軟體組時建立必要元件的實例並加以配置。
- 在專案 com.ibm.ws.eba.helloWorld.client中,建立藍圖 XML 檔:
- 用滑鼠右鍵按一下 com.ibm.ws.eba.helloWorld.client 專案,然後選取 新建 > 藍圖檔案。
- (選用) 指定檔名。 如果它是 XML 檔,則可以是任何名稱。 例如, helloWorldRef.xml。
- 保留其他選項作為預設值。
- 按一下完成。
- 將參照元素新增至藍圖 XML 檔。
- 在「 設計 」標籤中,按一下「 概觀 」窗格中的 新增 。
- 選取 參照,然後按一下 確定。
- 按一下 參照介面 欄位旁的 瀏覽 。
- 輸入 Hello,從 相符項目 清單中選取
HelloWorldEBA,然後按一下 確定。 - 在 參照 ID 欄位中,輸入 helloEBARef,然後按一下 確定 以新增參照元素。
- 將 Bean 元素新增至藍圖 XML 檔。
- 在「 概觀 」窗格中選取 藍圖 ,然後按一下 新增。
- 選取 Bean,然後按一下 確定。
- 按一下 瀏覽,選取
HelloWorldClient,然後按一下 確定。 - 按一下 確定 來新增 Bean 元素。
- 在「 方法參照 」窗格中,按一下 起始設定方法 欄位旁的 瀏覽 。
- 選取 refHello() ,然後按一下 確定
- 新增內容至 Bean。
- 在「 概觀 」窗格中選取 HelloWorldClientBean ,然後按一下 新增。
- 選取 內容,然後按一下 確定。
- 在「 詳細資料 」窗格的 名稱 欄位中,輸入 helloWorldEBAService 。
- 按一下 參照 欄位旁的 瀏覽 。
- 選取 helloEBARef ,並按一下 確定。
- 檢查藍圖 XML 原始碼。此藍圖檔案指定元件的內部佈線。
<?xml version="1.0" encoding="UTF-8"?> <blueprint xmlns="https://www.osgi.org/xmlns/blueprint/v1.0.0"> <reference id="helloEBARef" interface="com.ibm.ws.eba.helloWorld.api.HelloWorldEBA"/> <bean id="HelloWorldClientBean" class="com.ibm.ws.eba.helloWorld.client.HelloWorldClient" init-method="refHello"> <property name="helloWorldEBAService" ref="helloEBARef"/> </bean> </blueprint>在前一個程式碼區塊中:- 建立
com.ibm.ws.eba.helloWorld.client.HelloWorldClientBean 時會呼叫init-methodrefHello。 property元素指定如何注入相依關係。- 透過呼叫內容 setter
public void setHelloWorldEBAService(HelloWorldEBA helloWorldEBAService)來設定內容 helloWorldEBAService 。 您可以針對根據 Java™ Bean 使用慣例所定義的 Bean 內容使用 setter 注入。 - ref 屬性指定要注入之元件的 Blueprint 元素 ID。 ref 屬性必須符合這個檔案中的最上層元素。 在此情況下,它會符合
reference元素。
- 透過呼叫內容 setter
reference元素定義此 Blueprint 模組在具有com.ibm.ws.eba.helloWorld.api.HelloWorldEBA介面的 OSGi 服務上的相依關係。 當「藍圖儲存器」啟動此模組時,介面屬性的值必須符合 OSGi 服務登錄中的可用服務。 如果無法進行比對,則不會啟動「藍圖」模組。 在此情況下,服務定義在服務組合藍圖 XML 的服務元素中。
Bean 管理程式
小節及 121.7服務參照管理程式
小節。 - 建立
- 儲存並關閉檔案。
- 在專案 com.ibm.ws.eba.helloWorld.client中,建立藍圖 XML 檔:
結果
下一步
現在您可以 建立 OSGi 應用程式,其中會將多個軟體組包裝在一起。