代码之家  ›  专栏  ›  技术社区  ›  Dunith Dhanushka

使用OSGi实现模块化API

  •  2
  • Dunith Dhanushka  · 技术社区  · 14 年前

    我们计划开发一个客户端Java API来检索股市数据。预计该API将设计为模块化系统,以便将各种组件插入到核心API中,以便于扩展特性。

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

    到目前为止,我的选择是将OSGI容器用于API,并将可插入组件开发为OSGI包。 既然这是一个API,OSGi会是这个上下文的最佳解决方案吗?

    有人能告诉我这个吗?

    3 回复  |  直到 14 年前
        1
  •  4
  •   anirvan    13 年前

    在与OSGi f/w一起工作了近一年之后,我对OSGi所提供的功能印象深刻:强大且强制的模块化、零停机时间、模块的可靠可插性和性能。

    尽管如此,让我向你保证,所有的善行并不是一目了然的。一定要弄到一些好的技术文件 in-action 这本书是一本好书,那本书也是 r4 specification ]. 缺乏了解会让你 LinkageErrors BundleExceptions ,这通常是非常神秘的,可以作为头痛的好来源。

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

    你可能经常会遇到这样的争论:OSGi是一个相当“过分的杀伤力”,我不会断然否认这一点。然而,如果您真的希望通过OSGi获得独特的功能,那么用这个f/w来解决问题比从头开始实现复杂的工作要简单得多。

    最后一件事-在使用w/OSGi工作时,您可能会一次又一次地遇到Spring,但这确实不是必需的,除非您熟悉w/Spring,否则可能也不值得深入了解。

        2
  •  2
  •   Uberto    14 年前

    我们正在使用osgi和Apache Felix开发一个大项目。 另一方面:由于Osgi本身的原因,我们很少遇到问题,去年也没有人遇到。Osgi确实按照承诺工作。

    另一方面,许多公共库和框架的行为不正常(比如Hibernate在类加载器链上没有正确返回)。尝试与除Jetty之外的db和web容器集成可能会有问题。

    在我看来,最大的问题是像Osgi这样的东西应该是Java标准Api的一部分,并且应该得到整个工具链的支持。 显然,甲骨文希望在未来继续使用Java Jigsaw项目,这是一个远没有雄心勃勃的模块化标准。

    不管怎样,如果你需要动态插件,我认为没有什么比Osgi更好的了,但是要准备写很多代码来支持它。

        3
  •  1
  •   djna    14 年前

    OSGi确实提供了可插入性,而且已经相当成熟。创建自己的等效框架需要做很多工作。