创建客户机捆绑软件

对于简单的 HelloWorld OSGi 应用程序,客户机捆绑软件会调用 HelloWorldService 服务,并使用该服务生成消息 OSGi Service: Hello World!.

准备工作

此任务假定您已创建 HelloWorldService 服务,如 创建服务束中所述。

有关此任务

捆绑软件(OSGi 模型中的模块化单元)是包含 OSGi 应用程序元数据的 JAR 文件。 此元数据在 JAR 文件 META-INF/MANIFEST.MF的清单文件中定义。

Rational® Application Developer Version 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 Service Platform Release 4 V 4.2 Core Specification 的 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中,创建 Blueprint XML 文件:
      1. 右键单击 com.ibm.ws.eba.helloWorld.client 项目,然后选择 新建 > 蓝图文件
      2. (可选)指定文件名。 如果它是 XML 文件,那么此名称可以是任何名称。 例如,helloWorldRef.xml
      3. 让其他选项保留为缺省值。
      4. 单击完成
    2. 将引用元素添加至“蓝图”XML 文件。
      1. 在 " 设计 " 选项卡中,单击 " 概述 " 窗格中的 添加
      2. 选择 参考,然后单击 确定
      3. 单击 引用接口 字段旁边的 浏览
      4. 输入 Hello,从 匹配项 列表中选择 HelloWorldEBA ,然后单击 确定
      5. 引用标识字段中,输入 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="http://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 指定要注入的组件的“蓝图”元素标识。 ref 属性必须与此文件中的顶级元素相匹配。 在这种情况下,它将与 reference 元素相匹配。
      • reference 元素定义此“蓝图”模块对带有 com.ibm.ws.eba.helloWorld.api.HelloWorldEBA 接口的 OSGi 服务的依赖性。 “蓝图”容器在启动此模块时,interface 属性的值必须与 OSGi 服务注册表中的可用服务相匹配。 如果无法使它们匹配,那么将不会启动“蓝图”模块。 在这种情况下,将在服务捆绑软件的“蓝图”XML 的服务元素中定义服务。
      有关更多信息,请参阅 OSGi Service Platform Release 4 V 4.2 Enterprise Specification 的 121.5 Bean Manager 部分和 121.7 Service Reference Managers 部分。
    6. 保存并关闭文件。

结果

已创建名为 com.ibm.ws.eba.helloWorld.client 的捆绑软件。 此捆绑软件调用 HelloWorldService 服务,并使用该服务生成消息 OSGi Service: Hello World!.

下一步做什么?

现在,您可以 创建 OSGi 应用程序,在该应用程序中打包了多个捆绑软件。