首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

为 WebSphere Application Server 开发企业 OSGi 应用程序(8)

为 WebSphere Application Server 开发企业 OSGi 应用程序(8)

SCA 构成当  或更高版本被安装后,OSGi 应用程序特性可以与 WebSphere                Application Server 的 Service Component Architecture (SCA) 支持联合使用。SCA 提供一个组装模型来将可能异构的组件合成为一些粗粒度的复合(composite),这些复合定义一些外部服务和引用,可以为它们配置各种不同的 bundle。关于使用显式声明的外部包将一些组件组装为一个一致的模块的概念方面,SCA 和 OSGi 共享一些公共概念。联合使用这些技术非常自然,尽管它们确实处理服务组装的不同和独特方面。
OSGi 应用程序本身可以从一个 OSGi bundle 集合组装,每个 OSGi bundle(比如这个博客样例应用程序的 Web、业务和持久性 bundle)都执行应用程序中的一个一致功能。
  • 在 bundle 内部,细粒度组件使用一个 Blueprint bean 定义实现为 POJO beans 并连接在一起;一个 bundle 的内部包对其他 bundle 不可见。
  • 在 OSGi 应用程序内部,bundle通过 OSGi 服务或外部包依赖项连接在一起;一个 OSGi 应用程序的内部包对其他应用程序不可见。
上面是两种不同级别的模块性。SCA 提供另一个级别:
  • 在一个 SCA 复合内部,SCA 组件通过 SCA 服务连接在一起;一个 SCA 复合的内部包对其他复合不可见。
一个 OSGi 应用程序可以组装为一个粗粒度的 SCA 复合中的一个 SCA 组件,并可以有选择地公开它实现的 OSGi 服务,使用 SCA 来为这些服务提供远程绑定。OSGi 应用程序提供的 SCA 组件实现的 SCA 组件类型为 implementation.osgiapp。它可以将其 Blueprint 配置的任何 OSGi 服务远程公开为 SCA 服务,并为这些服务配置远程绑定。
例如,假设您想将这个博客样例 OSGi 应用程序作为一个 SCA 组件,以及其他一些实现类型不同的组件(比如 EJB 组件)组合为一个 SCA 复合,然后将清单 3 中的代码段中定义的 bloggingServiceComponent 公开为一个带有默认 SCA bundle 的外部服务。您首先需要更新包含这个代码段的 Blueprint 服务定义,以表明这个服务是远程可用的。这需要在这个服务定义中添加一个标准 OSGi 属性 service.exported.interfaces,如清单 11 所示。
清单 11. 声明一个服务远程可用
1
2
3
4
5
6
7
8
9
10
11
12
13
<blueprint>
  <bean id="bloggingServiceComponent"
       class="com.ibm.ws.eba.example.blog.BloggingServiceImpl">
    ...
</bean>
<service ref="bloggingServiceComponent"
interface="com.ibm.ws.eba.example.blog.api.BloggingService">
<service-properties>
<entry key="service.exported.interfaces" value="*"/>
</service-properties>
</service>
  ...
</blueprint>




清单 10 中展示的应用程序清单文件需要表明这个服务应该在 OSGi 应用程序外部可见。为此,向应用程序清单文件添加 Application-ExportService 头部,如清单 12 所示。
清单 12. 从 OSGi 应用程序导出服务
1
2
3
4
5
6
7
8
9
Application-Name: Blog

Application-SymbolicName: com.ibm.ws.eba.example.blog.app

Application-Version: 1.0

...

Application-ExportService: com.ibm.ws.eba.example.blog.api.BloggingService




现在您可以配置一个其实现为 OSGi 应用程序并提供一个 SCA 服务的 SCA 组件,如清单 13 所示。
清单 13. 配置一个 SCA 组件
1
2
3
4
5
6
7
8
9
10
<composite name="SocialMediaComposite">
<component name="BlogComponent">
<scafp:implementation.osgiapp
applicationSymbolicName="com.ibm.ws.eba.example.blog.app"
applicationVersion="1.0.0"/>
<service name="bloggingServiceComponent">
<binding.sca>
</service>
</component>
</composite>




在这个示例中,显示了一个默认 SCA bundle,但也可以指定其他 bundle(比如 Web 服务的 binding.ws 或 JMS 的 binding.jms),具体取决于需要如何公开服务。
与导出远程服务的方式相似,implementation.osgiapp SCA 组件可以导入远程服务引用。关于联合使用 OSGi 和 SCA 的场景和模式的详细讨论超出了本文的范围。(请参见  了解更多信息。)
返回列表