创建客户机捆绑软件
对于简单的 HelloWorld OSGi 应用程序,客户机捆绑软件会调用 HelloWorldService 服务,并使用该服务生成消息 OSGi Service: Hello World!.
准备工作
有关此任务
捆绑软件(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 分钟) ![]()
过程
要创建客户端捆绑软件,请完成下列步骤:
- 创建 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 Service Platform Release 4 V 4.2 Core Specification 的 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中,创建 Blueprint XML 文件:
- 右键单击 com.ibm.ws.eba.helloWorld.client 项目,然后选择 新建 > 蓝图文件。
- (可选)指定文件名。 如果它是 XML 文件,那么此名称可以是任何名称。 例如,helloWorldRef.xml。
- 让其他选项保留为缺省值。
- 单击完成。
- 将引用元素添加至“蓝图”XML 文件。
- 在 " 设计 " 选项卡中,单击 " 概述 " 窗格中的 添加 。
- 选择 参考,然后单击 确定。
- 单击 引用接口 字段旁边的 浏览 。
- 输入 Hello,从 匹配项 列表中选择
HelloWorldEBA,然后单击 确定。 - 在引用标识字段中,输入 helloEBARef,然后单击确定以添加引用元素。
- 将 bean 元素添加至“蓝图”XML 文件。
- 在 " 概述 " 窗格中选择 蓝图 ,然后单击 添加。
- 选择 Bean,然后单击 确定。
- 单击浏览,选择
HelloWorldClient,然后单击确定。 - 单击确定以添加 bean 元素。
- 在“方法引用”窗格中,单击初始化方法字段旁边的浏览。
- 选择 refHello( ) 并点击 确定
- 将属性添加至 bean。
- 在概览窗格中选择 HelloWorldClientBean ,然后单击添加。
- 选择 属性,然后单击 确定。
- 在 " 详细信息 " 窗格中,在 名称 字段中输入 helloWorldEBAService 。
- 单击 引用 字段旁边的 浏览 。
- 选择 helloEBARef ,然后单击 确定。
- 检查“蓝图”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.HelloWorldClientBean 时,将调用init-methodrefHello。 property元素指定如何注入依赖性。- 通过调用属性 setter 方法
public void setHelloWorldEBAService(HelloWorldEBA helloWorldEBAService)来设置属性 helloWorldEBAService 。 您可以对根据 Java™ Bean 约定定义的 Bean 属性使用 setter 注入。 - 属性 ref 指定要注入的组件的“蓝图”元素标识。 ref 属性必须与此文件中的顶级元素相匹配。 在这种情况下,它将与
reference元素相匹配。
- 通过调用属性 setter 方法
reference元素定义此“蓝图”模块对带有com.ibm.ws.eba.helloWorld.api.HelloWorldEBA接口的 OSGi 服务的依赖性。 “蓝图”容器在启动此模块时,interface 属性的值必须与 OSGi 服务注册表中的可用服务相匹配。 如果无法使它们匹配,那么将不会启动“蓝图”模块。 在这种情况下,将在服务捆绑软件的“蓝图”XML 的服务元素中定义服务。
Bean Manager
部分和 121.7Service Reference Managers
部分。 - 创建
- 保存并关闭文件。
- 在项目 com.ibm.ws.eba.helloWorld.client中,创建 Blueprint XML 文件:
结果
下一步做什么?
现在,您可以 创建 OSGi 应用程序,在该应用程序中打包了多个捆绑软件。