用 OSGi 应用程序开发和工作的最佳实践
2010-10-09 08:12:40 来源:WEB开发网2. 使用 Blueprint 启用基于服务的供应
(专用于WebSphere Application Server)
使用 Blueprint 开发和使用 OSGi 服务时,Blueprint 定义将被用来确保在应用程序配置到 WebSphere Application Server 时满足服务依赖性。
原因如下
一个 OSGi bundle 清单描述了一个 bundle 从另一个 bundle 导入的包以及导出给其他 bundle 使用的包。因此,对于给定一个具体 bundle,为了满足所有包导入(包括传递依赖),决定一组必须的 bundle 很有可能。一个最佳实践是将界面和实现分到不同的 bundle(见 将 API 从实现分离)。另一个最佳实践是使用 OSGi 服务实现依赖(见 共享服务而不是实现))。这两个最佳实践的结果就是配置包依赖项仅满足界面需求,而不能提供实现 bundle。WebSphere Application Server OSGi 应用程序特性通过使用 Blueprint 定义决定一个 bundle 提供和需要的服务来解决这一问题。然后,在应用程序部署期间使用该信息从应用程序归档文件(.eba)或内部 bundle 存储库(一个配置和管理 WebSphere Application Server 管理的 bundle 存储库)提供实现。
示例
图 1. 基于供应示例的服务
图 1 显示了一个 API bundle、一个提供服务的实现和一个使用来自实现 bundle 的客户端 bundle。客户端 bundle 和实现 bundle 在 API bundle 上都有一个包依赖项(package dependency),其中含有服务 Java 界面。客户端 bundle 是 OSGi 应用程序(在内容中列出)的一部分,API 和实现 bundle 是共享的,都是来自于内部 bundle 存储库。API bundle 将配置到 WebSphere Application Server 作为包依赖的结果,如果客户端 bundle 和实现 bundle 都是使用 Blueprint 实现的,那么实现 bundle 也将被配置。如果这两个 bundle 中有一个不使用 Blueprint,那么将不配置实现 bundle 。
更多精彩
赞助商链接