使用OSGi实现模块化API

时间:2010-11-15 06:47:32

标签: api osgi

我们计划开发客户端Java API以检索股票市场数据。期望将API设计为模块化系统,以便可以将各种组件插入到核心API中,以便于扩展功能。

应该动态地将组件插入到核心API中,并且应该有一种通过通用API控制组件生命周期的方法。

到目前为止,我的选择是使用OSGI容器作为API并开发可插入组件作为OSGi包。 由于这是一个API,OSGi是否会成为此背景的最佳解决方案?

有人可以告诉我这个吗?

3 个答案:

答案 0 :(得分:4)

与OSGi f / w合作已近一年,我对OSGi所提供的内容印象深刻 - 强大且强制的模块化,零停机,模块的可靠插拔性和性能。

然而,话说回来,让我向你们保证,所有的善良都不会立刻显现出来。一定要掌握一些好的技术文档[in-action书是精美的文本,r4 specification]也是如此。缺乏理解可能会让你加入LinkageErrorsBundleExceptions的公司,这些公司通常非常神秘,可以作为头痛的良好来源。

除了理解f / w之外,你还应该强调与内聚和松散耦合,对接口编程相关的“良好实践”。您还应该查看BND tool,这是打包OSGi包的绝佳方法。

你可能经常会遇到一些争论,说明OSGi是一个“过度杀伤”,我不会直截了当地否认它。但是,如果你真的希望通过OSGi提供独特的功能,那么你可以更轻松地使用这个f / w,而不是从头开始实现复杂的解决方法。

最后一件事 - 你可能会在使用OSGi时一次又一次地遇到Spring,但实际上并不是必需的,除非你熟悉Spring,否则进入它可能也不值得。

答案 1 :(得分:2)

我们正在使用osgi和Apache Felix开展一个大项目。 在奖金方面:我们很少遇到Osgi本身的问题,无论如何在去年都没有人。奥斯基确实按照承诺行事。

从负面来看,许多常见的库和框架都没有正常运行(比如在ClassLoader链上没有正确返回的Hibernate)。尝试与除Jetty之外的数据库和Web容器集成可能会有问题。

在我看来,最大的问题是像Osgi这样的东西应该是Java Standard Api的一部分,应该得到整个工具链的支持。 显然,Oracle希望将来使用Java Jigsaw项目,这是一个不那么雄心勃勃的模块化标准。

无论如何,如果你需要动态插件,我认为没有比Osgi更好的了,但是要准备好编写大量代码来支持它。

答案 2 :(得分:1)

OSGi确实提供了可插拔性,而且非常成熟。滚动你自己的等效框架将是很多工作。