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

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

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

一个样例 OSGi 应用程序我们现在来看看 OSGi 应用程序特性自带的一个样例,以了解这样的应用程序通常是如何开发和部署的。这个样例是一个简单的博客发布应用程序,演示如何在一个 OSGi 应用程序中联合使用 Web、Blueprint 和持久性技术。(如果您想深入研究其代码,请查看 OSGi Applicantion 特性包自带的这个博客应用程序的源代码。)
图 2. 博客样例应用程序这个博客样例展示了企业应用程序的典型架构。该架构包含 4 个松耦合 bundle:一个 Web 层、一个业务逻辑层、一个持久化层、以及一个 API bundle。
首先,注意如何将这些 API 拉到它们各自的 bundle 中。这是保持耦合松散的一个 OSGi 最佳实践。如果必要,一个实现可以在部署时或甚至在运行时轻松交换为另一个实现。
bundle 之间的耦合利用一个基本 OSGi 构造 — 服务(在图 2 中表示为三角形),服务在 bundle 之间维护理想的松散耦合并允许以对应用程序其余部分的最小影响更轻松地替换 bundle 实现。如  所述,OSGi 应用程序不必直接与 OSGi 服务注册表交互,相反,可以通过简单 POJO beans 的声明性 Blueprint 配置这样做。blog-biz 和 blog-persistence bundle 都是用 Blueprint 配置的 beans 来封装业务逻辑,并通过管理它们的生命周期的 Blueprint 容器将它们的依赖项和配置注入自身。Blueprint 容器将 blog-biz bundle 中的 beans 连接到一起,并将 blog-biz bundle 中的组件连接到 blog-persistence bundle 提供的 Blog persistence 服务。
应用程序的前端是一个使用我们熟悉的 Java EE servelet 组件的 Web 模块。为演示结合 Java EE 编程风格和基于服务的 OSGi 风格是多么简单,样例 blog-web bundle 遵循一个纯 Java EE 编程模型并使用 JNDI 来访问 Blueprint 发布的 OSGi 服务。企业 OSGi 规范为 JNDI 客户机定义了一个标准机制来获取 OSGi 服务的引用,在两种编程风格之间架起了一个天然的桥梁。
blog-persistence-jpa bundle 将 JPA 用作持久性框架,条目通过该框架持久存储到一个数据库并从该数据库检索。它利用 Blueprint 容器的功能来管理持久性上下文和全局事务,以确保业务逻辑的开发和单元测试尽可能保持简单。
最后,这些博客 JAR 被打包到一个 EBA 中并部署到 WebSphere Application Server。
我们下面仔细看看这个应用程序的每个元素。
API bundle API bundle  是最简单的组件,这也许不会令人感到奇怪。它是一个简单的 OSGi bundle,不利用任何企业特性。如前所述,正是 JAR 清单文件中的 OSGi 元数据向 JAR 赋予 “bundle 特征”。在这个博客 API 示例中,这个 bundle 声明导出 com.ibm.ws.eba.example.blog.api、com.ibm.ws.eba.example.blog.comment.persistence.api 和 com.ibm.ws.eba.example.blog.persistence.api 三个包,版本号为 1.0.0。
清单 4. 博客样例 API bundle 清单文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Manifest-Version: 1.0

Bundle-ManifestVersion: 2

Bundle-Name: blog

Bundle-SymbolicName: com.ibm.ws.eba.example.blog.api

Bundle-Version: 1.0.0

Export-Package:

com.ibm.ws.eba.example.blog.api;version=1.0.0,

com.ibm.ws.eba.example.blog.comment.persistence.api;version=1.0.0,

com.ibm.ws.eba.example.blog.persistence.api;version=1.0.0

返回列表