用 OSGi 应用程序开发和工作的最佳实践
2010-10-09 08:12:40 来源:WEB开发网如果,实现 bundle 使用 Blueprint,而客户端不使用,那么也提供应用程序,但是没有实现 bundle 。这是因为供应程序没有意识到客户端 bundle 缺失服务依赖。如果客户端 bundle 使用 Blueprint 但是实现 bundle 没有使用,那么应用程序将不能部署,因为供应程序不能满足客户端 bundle 服务依赖。
3. 使用 Blueprint 来启用 SCA 集成
(专用于 WebSphere Application Server)
开发集成其他技术的 OSGi 应用程序时,一个最佳实践(实际上是必不可少的)是使用 Blueprint 来定义 OSGi 应用程序的服务实现。
原因如下
在 WebSphere Application Server 中,SCA 用于聚合 OSGi 应用程序和其他应用程序类型(例如,Java EE)。它也用来通过各种传输和协议(例如 JMS、Web services、Atom)公开 OSGi 应用程序服务,也可使服务依赖通过这些传输和协议进行调用。要做到这一点,SCA 需要一个由 OSGi 应用程序提供的服务描述和应用程序需要的服务。SCA 重新使用 Blueprint XML 中描述的信息来推出 SCA 所需的信息。因此将 OSGi 应用程序公开到 SCA 时,必须使用 Blueprint。如果一个 OSGi 应用程序包含使用 Blueprint 时没有定义的服务,那么必须创建向 Blueprint 描述这些服务的 Blueprint 虚包,然后将请求转发给非 Blueprint 服务实现。
图 2. Blueprint 支持 SCA 集成
图 2 显示了一个 OSGi 应用程序和一个 bundle,提供了一个由 SCA 从应用程序外部调用的服务。这个调用来自另一个组件(似乎是另一个 OSGi 应用程序或一个 Java EE 应用程序),或者来自一个特定的绑定,例如一个 Web 服务或 JMS 调用。同一个 bundle 也需要一个由 SCA 提供的外部应用程序服务。这可能再一次调用另一个 SCA 组件,或在一个特定的绑定上进行一次调用。在图 2 的第一个图表中,Bundle A 是使用 Blueprint 实现的。SCA 使用 Blueprint 服务定义来了解如何分辨和调用目标 OSGi 服务。SCA 不使用 Blueprint 服务参考定义,因为在应用程序清单(用于定义一个 OSGi 应用程序的构件)中有充足信息来确定什么样的服务是有效目标。在第二个图表中,服务和参考资料在 Bundle B 中使用其他组件模型实现,例如,声明服务(DB)。SCA 不能理解 DS,因此这是无效的。在第 3 个图表中,一个 Blueprint 虚包 bundle(Bundle C )用于向 SCA 描述服务,然后将调用转发到 Bundle B 中的 DS 服务实现。
赞助商链接