WEB开发网
开发学院软件开发Java 用 OSGi 应用程序开发和工作的最佳实践 阅读

用 OSGi 应用程序开发和工作的最佳实践

 2010-10-09 08:12:40 来源:WEB开发网   
核心提示: 示例一个设计不佳的示例是一个登录实现,使用户可以登录文件系统、通过 JPA 登录数据库,用 OSGi 应用程序开发和工作的最佳实践(10),或登录一个消息队列(图 9),为了使用文件系统 logger,根据部署到框架的 bundle 而定,结果是提供一个特殊包的 bundle 能够被提供相同包的

示例

一个设计不佳的示例是一个登录实现,使用户可以登录文件系统、通过 JPA 登录数据库,或登录一个消息队列(图 9)。为了使用文件系统 logger,一个应用程序需要加载消息 API、JAP API,等等。因此,应用程序含有 logger 实现类,但并不使用。一个比较好的解决方案是登录接口和各个实现相互分离(图 10)。通过这种方式,应用程序可以选择包含一个它使用的登录 bundle ,而不包括额外实现类和任何进一步实现,这些都出现在登录 bundle 中。

图 9. 一个不良设计系统,其中一个 bundle 提供一个 API 的多个实现

用 OSGi 应用程序开发和工作的最佳实践

图 10. 一个设计良好的系统,其中一个 API 的每个实现都由一个独立的 bundle 提供

用 OSGi 应用程序开发和工作的最佳实践

8. 避免拆分包和 Require-Bundle

开发 OSGi bundle 时,一个最佳实践是将一个包的所有类放在一个 bundle 中。将一个包分成多个 bundle 会导致使用 Require-Bundle,从而损害使用这些 bundle 的系统的可扩展和维护程度。

原因如下

模块化系统由松耦合、高聚合模块组成,每个模块执行一个相关的逻辑功能,它们之间的界限有明确的定义。该设计目标将生成易于维护和扩展的系统。OSGi bundle 是包上的模块化。

OSGi 通过每个 bundle 声明其提供松耦合的模块,这在 OSGi 术语中称为 bundle 。这是满足运行时 bundle 提供的包的。一个 bundle 不能直接依存于一个提供相关性的 bundle;至于哪个 bundle 提供相关性由 OSGi 运行时决定,根据部署到框架的 bundle 而定。结果是提供一个特殊包的 bundle 能够被提供相同包的不同 bundle 所取代,而不改变依赖那个包的 bundle。

上一页  5 6 7 8 9 10 

Tags:OSGi 应用程序 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接