建立用戶端組合

對於簡式 HelloWorld OSGi 應用程式,用戶端軟體組會呼叫 HelloWorldService 服務,並使用它來產生訊息 OSGi Service: Hello World!.

開始之前

此作業假設您已建立 HelloWorldService 服務,如 建立服務組合中所述。

關於這項作業

軟體組 (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 分鐘) Flash 示範圖示

程序

若要建立用戶端組合,請完成下列步驟:

  1. 建立 OSGi 軟體組專案。
    1. 按一下 檔案 > 新建 > OSGi 軟體組專案
      會顯示「 OSGi 軟體組專案 」畫面。
    2. 配置專案。
      • 專案名稱中,輸入 com.ibm.ws.eba.helloWorld.client
      • 清除 新增組合至應用程式 勾選框。 如果您維持選取這個勾選框,會自動建立新的 OSGi 應用程式專案,並將軟體組新增至其中。 不過,在這裡,將在個別作業 建立 OSGi 應用程式中手動建立應用程式專案。
      • 保留其他選項作為預設值。
    3. 下一步
      即會顯示「 Java 配置 」畫面。 接受此畫面上所有選項的預設值。
    4. 下一步
      這時會顯示「 OSGi 軟體組設定 」畫面。 接受此畫面上所有選項的預設值。
    5. 按一下 完成
    您已建立 OSGi 專案。
  2. HelloWorldEBA 介面可供用戶端實作組合使用。

    編輯用戶端組合資訊清單,使 com.ibm.ws.eba.helloWorld.api 套件內的類別可供用戶端實作組合使用。 com.ibm.ws.eba.helloWorld.api 套件是 com.ibm.ws.eba.helloWorld.api 組合的一部分。

    1. 展開 com.ibm.ws.eba.helloWorld.client 專案
    2. 使用資訊清單編輯器開啟組合 MANIFEST.MF 檔案。
      此檔案位於 BundleContent/META-INF 目錄中。
    3. 按一下 相依關係 標籤。
    4. 在「 匯入的套件 」窗格中,按一下 新增
    5. 在「 選取套件 」對話框中,輸入 com.ibm.ws.eba,從 匯出的套件 清單中選取 com.ibm.ws.eba.helloWorld.api (1.0.0) ,然後按一下 確定
      套件會新增至 匯入的套件 清單。
    6. 匯入的套件 清單中,選取 com.ibm.ws.eba.helloWorld.api 套件,然後按一下 內容
    7. 在「 內容 」對話框中,將 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 版本範圍 一節。

      已指定此版本範圍,以確保用戶端組合使用套件的更新版本 (如果它在次要版本或微版本的值上不同,但在主要版本上不同) ,因為只有二進位不相容變更 (例如刪除公用方法) 可以導致用戶端組合停止正常運作。

    8. 儲存並關閉檔案。
  3. 建立類別 HelloWorldClient
    1. 在專案來源資料夾中 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 相依關係注入服務。
    2. 儲存並關閉檔案。
  4. 建立藍圖配置。

    藍圖配置包含軟體組元件組合和配置資訊。 它也說明如何在 OSGi 服務登錄中登錄元件,或元件如何從 OSGi 服務登錄查閱服務。 這項資訊會在執行時期使用,以便於啟動軟體組時建立必要元件的實例並加以配置。

    1. 在專案 com.ibm.ws.eba.helloWorld.client中,建立藍圖 XML 檔:
      1. 用滑鼠右鍵按一下 com.ibm.ws.eba.helloWorld.client 專案,然後選取 新建 > 藍圖檔案
      2. (選用) 指定檔名。 如果它是 XML 檔,則可以是任何名稱。 例如, helloWorldRef.xml
      3. 保留其他選項作為預設值。
      4. 按一下完成
    2. 將參照元素新增至藍圖 XML 檔。
      1. 在「 設計 」標籤中,按一下「 概觀 」窗格中的 新增
      2. 選取 參照,然後按一下 確定
      3. 按一下 參照介面 欄位旁的 瀏覽
      4. 輸入 Hello,從 相符項目 清單中選取 HelloWorldEBA ,然後按一下 確定
      5. 參照 ID 欄位中,輸入 helloEBARef,然後按一下 確定 以新增參照元素。
    3. 將 Bean 元素新增至藍圖 XML 檔。
      1. 在「 概觀 」窗格中選取 藍圖 ,然後按一下 新增
      2. 選取 Bean,然後按一下 確定
      3. 按一下 瀏覽,選取 HelloWorldClient,然後按一下 確定
      4. 按一下 確定 來新增 Bean 元素。
      5. 在「 方法參照 」窗格中,按一下 起始設定方法 欄位旁的 瀏覽
      6. 選取 refHello() ,然後按一下 確定
    4. 新增內容至 Bean。
      1. 在「 概觀 」窗格中選取 HelloWorldClientBean ,然後按一下 新增
      2. 選取 內容,然後按一下 確定
      3. 在「 詳細資料 」窗格的 名稱 欄位中,輸入 helloWorldEBAService
      4. 按一下 參照 欄位旁的 瀏覽
      5. 選取 helloEBARef ,並按一下 確定
    5. 檢查藍圖 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.HelloWorldClient Bean 時會呼叫 init-method refHello
      • property 元素指定如何注入相依關係。
        • 透過呼叫內容 setter public void setHelloWorldEBAService(HelloWorldEBA helloWorldEBAService)來設定內容 helloWorldEBAService 。 您可以針對根據 Java™ Bean 使用慣例所定義的 Bean 內容使用 setter 注入。
        • ref 屬性指定要注入之元件的 Blueprint 元素 ID。 ref 屬性必須符合這個檔案中的最上層元素。 在此情況下,它會符合 reference 元素。
      • reference 元素定義此 Blueprint 模組在具有 com.ibm.ws.eba.helloWorld.api.HelloWorldEBA介面的 OSGi 服務上的相依關係。 當「藍圖儲存器」啟動此模組時,介面屬性的值必須符合 OSGi 服務登錄中的可用服務。 如果無法進行比對,則不會啟動「藍圖」模組。 在此情況下,服務定義在服務組合藍圖 XML 的服務元素中。
      如需相關資訊,請參閱「OSGi 服務平台第 4 版 4.2 企業規格」的 121.5 Bean 管理程式 小節及 121.7 服務參照管理程式 小節。
    6. 儲存並關閉檔案。

結果

您已建立稱為 com.ibm.ws.eba.helloWorld.client的組合。 此組合會呼叫 HelloWorldService 服務,並使用它來產生訊息 OSGi Service: Hello World!.

下一步

現在您可以 建立 OSGi 應用程式,其中會將多個軟體組包裝在一起。