创建服务捆绑软件
对于简单的 HelloWorld OSGi 应用程序,服务捆绑软件实现 HelloWorldEBA 接口并将其作为 OSGi 服务导出。
有关此任务
捆绑软件(OSGi 模型中的模块化单元)是包含 OSGi 应用程序元数据的 JAR 文件。 此元数据在 JAR 文件 META-INF/MANIFEST.MF的清单文件中定义。
Rational® Application Developer Version 8.5 为创建和打包捆绑软件提供图形支持。 下面的样本过程使用此工具。 您也可以使用其他工具,并且这些步骤可以适应其他工具。
com.ibm.ws.eba.helloWorld.api:此捆绑软件声明 HelloWorldEBA 接口。com.ibm.ws.eba.helloWorld.service:此捆绑软件实现 HelloWorldEBA 接口并将其作为 OSGi 服务导出。 导出的服务由客户机捆绑软件com.ibm.ws.eba.helloWorld.client使用,如 创建客户机捆绑软件中所述。
此任务的演示 (9 分钟) ![]()
过程
要创建服务捆绑软件,请完成下列步骤:
- 创建 com.ibm.ws.eba.helloWorld.api 捆绑软件。 此捆绑软件声明 HelloWorldEBA 接口。
- 单击 文件 > 新建 > OSGi 捆绑软件项目。将显示 " OSGi 捆绑软件项目 " 面板。
- 配置项目。
- 对于项目名称,输入 com.ibm.ws.eba.helloWorld.api。
- 清除 将捆绑软件添加到应用程序 复选框。 如果保留选中此复选框,那么将自动创建一个新 OSGi 应用程序项目,并会将捆绑软件添加到该项目。 但是,将在单独的任务 创建 OSGi 应用程序中手动创建应用程序项目。
- 让其他选项保留为缺省值。
- 单击 下一步。将显示 " Java 配置 " 面板。 请接受此面板上的所有选项的缺省值。
- 单击 下一步。将显示 " OSGi 捆绑软件设置 " 面板。 请接受此面板上的所有选项的缺省值。
- 单击 完成。
您已创建 OSGi 项目。 - 单击 文件 > 新建 > OSGi 捆绑软件项目。
- 声明
HelloWorldEBA接口。创建名为 com.ibm.ws.eba.helloWorld.api 的软件包,该软件包包含名为
HelloWorldEBA的接口。 编写此接口以便只包含一个方法:hello()。- 在 com.ibm.ws.eba.helloWorld.api 项目下,右键单击文件夹 src,然后选择 新建 > 包。
- 将新软件包命名为
com.ibm.ws.eba.helloWorld.api。 - 单击 完成。
- 右键单击新软件包,然后选择 新建 > 接口。
- 将新接口命名为
HelloWorldEBA。 - 单击 完成。
- 复制并粘贴以下方法以替换接口文件的内容:
package com.ibm.ws.eba.helloWorld.api; public interface HelloWorldEBA { public void hello(); } - 保存并关闭文件。
- 将
com.ibm.ws.eba.helloWorld.api软件包配置为导出的软件包。编辑
com.ibm.ws.eba.helloWorld.api项目中的捆绑软件清单以允许其他捆绑软件装入com.ibm.ws.eba.helloWorld.api软件包中的类。 捆绑软件清单中未导出的软件包的类是定义捆绑软件的专用类,并且不能由任何其他捆绑软件装入。- 使用清单编辑器打开捆绑软件 MANIFEST.MF 文件。此文件位于 BundleContent/META-INF 目录中。
- 单击 运行时 选项卡。
- 在 " 导出的软件包 " 窗格中,单击 添加。
- 从列表中选择
com.ibm.ws.eba.helloWorld.api包,然后单击 确定。 - 在 " 导出的软件包 " 窗格中,单击 属性。
- 在 " 属性 " 对话框中,将 version 设置为 1.0.0,然后单击 确定。
- 保存并关闭文件。
- 使用清单编辑器打开捆绑软件 MANIFEST.MF 文件。
- 创建 com.ibm.ws.eba.helloWorld.service 捆绑软件。 此捆绑软件实现 HelloWorldEBA 接口。
- 单击 文件 > 新建 > OSGi 捆绑软件项目。将显示 " OSGi 捆绑软件项目 " 面板。
- 配置项目。
- 对于项目名称,输入 com.ibm.ws.eba.helloWorld.service。
- 清除 将捆绑软件添加到应用程序 复选框。 如果保留选中此复选框,那么将自动创建一个新 OSGi 应用程序项目,并会将捆绑软件添加到该项目。 但是,将在单独的任务 创建 OSGi 应用程序中手动创建应用程序项目。
- 让其他选项保留为缺省值。
- 单击 下一步。将显示 " Java 配置 " 面板。 请接受此面板上的所有选项的缺省值。
- 单击 下一步。将显示 " 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.service项目。 - 使用清单编辑器打开捆绑软件 MANIFEST.MF 文件。此文件位于 BundleContent/META-INF 目录中。
- 单击 依赖关系 选项卡。
- 在 " 已导入的软件包 " 窗格中,单击 添加。
- 在 " 软件包选择 " 对话框中,输入 com.ibm.ws.eba,从 导出的软件包 列表中选择
com.ibm.ws.eba.helloWorld.api,然后单击 确定。该软件包将添加到“已导入的软件包”列表中。 - 在 已导入的软件包 列表中,选择
com.ibm.ws.eba.helloWorld.api软件包,然后单击 属性。 - 在 " 属性 " 对话框中,将 minimum version 设置为 1.0.0 Inclusive,将 maximum
version 设置为 1.1.0 Exclusive,然后单击 确定。此软件包在“已导入的软件包”列表中的条目将更新为
com.ibm.ws.eba.helloWorld.api [1.0.0,1.1.0)。此版本语法表示
导出的版本介于 1.0.0 (含) 和 1.1.0 (独占) 之间的软件包将与此导入
匹配。 有关版本语法的更多信息,请参阅 OSGi Service Platform Release 4 V 4.2 Core Specification 的 3.2.6版本范围
部分。已指定此版本范围以确保仅当软件包的更新版本的微版本值不同时,实现捆绑软件才使用此软件包的更新版本,这是因为一个主要更改(例如,除去接口中的方法)或一个次要更改(例如,将方法添加到接口)都可能导致实现捆绑软件无法正常工作。
- 保存并关闭文件。
- 展开
- 实现 HelloWorld 服务。
创建名为
com.ibm.ws.eba.helloWorld.service的软件包,该软件包包含名为HelloWorldService的实现类。 对此类进行编码以从HelloWorldEBA接口实现 hello() 方法。 类的此实现会导致 OSGi Service: Hello World!要显示的 。- 在 com.ibm.ws.eba.helloWorld.service 项目下,右键单击文件夹 src,然后选择 新建 > 包。
- 将新软件包命名为
com.ibm.ws.eba.helloWorld.service。 - 单击 完成。
- 右键单击新包,然后选择 新建 > 类。
- 将新接口实现类命名为
HelloWorldService。 - 单击 接口 字段旁边的 添加 。
- 输入 Hello,从 匹配项 列表中选择
HelloWorldEBA,然后单击 确定。 - 确保选中 继承的抽象方法 复选框。
- 单击 完成。
- 为继承的
hello()方法提供实现代码。将行
替换为行// TODO Auto-generated method stub
现在该实现类的完整代码应该如下所示:System.out.println(OSGi Service: Hello World!);package com.ibm.ws.eba.helloWorld.service; import com.ibm.ws.eba.helloWorld.api.HelloWorldEBA; public class HelloWorldService implements HelloWorldEBA { @Override public void hello() { System.out.println(OSGi Service: Hello World!); } } - 保存并关闭文件。
- 通过使用 OSGi“蓝图”XML 导出 helloWorld 服务。
蓝图配置包含捆绑软件组件组合件和配置信息。 它也描述了组件如何在 OSGi 服务注册表中注册,或它们如何从 OSGi 服务注册表查找服务。 此信息用于在启动捆绑软件时,在运行时实例化并配置必需的组件。
- 在项目 com.ibm.ws.eba.helloWorld.service中,创建 Blueprint XML 文件:
- 右键单击 com.ibm.ws.eba.helloWorld.service 项目,然后选择 新建 > 蓝图文件。
- 请接受此面板上的所有选项的缺省值。
- 单击完成。
- 将 bean 元素添加至“蓝图”XML 文件。
- 在 " 设计 " 选项卡中,单击 " 概述 " 窗格中的 添加 。
- 选择 Bean,然后单击 确定。
- 单击浏览,选择
HelloWorldService,然后单击确定。 - 在 Bean 标识字段中,输入 HelloEBA,然后单击确定以添加 bean 元素。
- 将 service 元素添加到“蓝图”XML 文件。
- 在 " 概述 " 窗格中选择 蓝图 ,然后单击 添加。
- 选择 服务,然后单击 确定。
- 单击 服务接口 字段旁边的 浏览 。
- 输入 Hello,从 匹配项 列表中选择
HelloWorldEBA,然后单击 确定。 - 单击 Bean 引用字段旁边的浏览,选择 HelloEBA,然后单击确定。
- 单击确定以添加 service 元素。
- 检查“蓝图”XML 源代码。选择 源 选项卡。 源代码应该如下所示:
<?xml version="1.0" encoding="UTF-8"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> <bean id="helloEBA" class="com.ibm.ws.eba.helloWorld.service.HelloWorldService"/> <service id=HelloEBAService ref="helloEBA" interface="com.ibm.ws.eba.helloWorld.api.HelloWorldEBA"/> </blueprint>在前一个代码块中:bean元素定义要实例化的“蓝图”组件。 在此示例中,bean元素通过调用com.ibm.ws.eba.helloWorld.service.HelloWorldService类的构造函数来使 BeanhelloEBA实例化。id属性标识 bean。 如果从“蓝图”信息中的任何其他位置引用 bean(例如,从service元素),那么必须指定此属性。class属性指定实例化 bean 的哪个实施类。
service元素定义 OSGi 服务注册表中组件的注册。 在此示例中,service元素将名为helloEBA的 Bean 注册为具有接口com.ibm.ws.eba.helloWorld.api.HelloWorldEBA的 OSGi 服务注册表中的服务 (由接口属性指定)。ref属性指示要注册的 bean 的id。 此id在bean元素中定义。interface属性指示 bean 类实现的接口。
Bean Manager
部分和 121.6Service Manager
部分。 - 保存并关闭文件。
注: 您可能会收到异常消息 (在 " 问题 " 窗格中可视) ,指出构建属性文件中没有OSGI-INF的bin.include条目。 如果看到此消息,请使用快速修正选项添加该条目(右键单击该问题,然后选择快速修正)。 - 在项目 com.ibm.ws.eba.helloWorld.service中,创建 Blueprint XML 文件:
结果
com.ibm.ws.eba.helloWorld.api 和 com.ibm.ws.eba.helloWorld.service。 com.ibm.ws.eba.helloWorld.service 服务实现在 com.ibm.ws.eba.helloWorld.api 捆绑软件中声明的 HelloWorldEBA 接口并包含导出 com.ibm.ws.eba.helloWorld.service 服务时所需的业务逻辑和元数据。下一步做什么?
现在,您可以使用 com.ibm.ws.eba.helloWorld.service 服务的 创建客户机捆绑软件 。