代码之家  ›  专栏  ›  技术社区  ›  Nicholas Trandem

开始使用OSGI的最佳方式是什么?[关闭]

  •  45
  • Nicholas Trandem  · 技术社区  · 18 年前

    是什么让模块/服务/应用程序功能位成为OSGi模块的特别好的候选者?

    我有兴趣使用 OSGi 在我的申请中。我们是一家Java商店,我们非常广泛地使用Spring,所以我倾向于使用 Spring Dynamic Modules for OSGi(tm) Service Platforms 。我正在寻找一种好的方法,将一点OSGi作为试用整合到应用程序中。这里有人使用过这种或类似的OSGi技术吗?有什么陷阱吗?

    @尼古拉斯-谢谢,我看过那个。这是一个很好的教程,但我更想了解如何制作我的第一个“真正的”OSGi包,而不是Hello World示例。

    @大卫-谢谢你的链接!理想情况下,有了一个绿地应用程序,我会把整个东西设计成动态的。不过,我现在想要的是在现有应用程序的一小部分中引入它。假设我可以选择应用程序的任何一部分,那么作为OSGi豚鼠,有哪些因素会使该部分变得更好或更差呢?

    8 回复  |  直到 18 年前
        1
  •  38
  •   Ashutosh Jindal    12 年前

    好吧,既然你不能有一部分OSGi和一部分非OSGi,你就需要让你的整个应用程序成为OSGi。在最简单的形式中,您可以从整个应用程序中创建一个OSGi包。显然,这不是一种最佳实践,但了解在OSGi容器(Equinox、Felix、Knoplerfish等)中部署包的感觉可能会很有用。

    为了将其提升到一个新的水平,您需要开始将应用程序拆分为组件,组件通常应该有一组职责,可以通过一组接口和类依赖关系与应用程序的其他部分隔离开来。纯手工识别这些代码的范围从设计良好、高度内聚但松散耦合的应用程序的简单到您不熟悉的互锁源代码的噩梦。

    一些帮助可以来自以下工具 JDepend 它可以显示Java包与系统中其他包/类的耦合。具有低传出耦合的包应该比具有高传出耦合的更容易提取到OSGi包中。使用专业工具可以获得更多的架构见解,例如 Structure 101 .

    纯粹在技术层面上,每天使用由160个OSGi捆绑包组成的应用程序并使用Spring DM,我可以确认从“正常”Spring到Spring DM的过渡基本上是无痛的。额外的命名空间以及您可以(并且应该)将OSGi特定的Spring配置隔离在单独的文件中的事实,使得在有和没有OSGi部署场景的情况下都更容易实现。

    OSGi是一个深度和广度的组件模型,我推荐以下文档:

    • OSGi R4 Specification :获取Core和Compendium规范的PDF,它们是规范的、权威的,并且非常可读。随时都有方便的快捷方式,你会咨询他们的。
    • 阅读OSGi最佳实践,你会发现很多东西 只做一组稍微小一点的事情 本应 做一些你应该做的事情 不做 (例如,动态导入:*)。

    一些链接:

        2
  •  9
  •   Toni Menzel    17 年前

    当学习一项新技术时,丰富的工具会让你在没有大麻烦的情况下进入工作。 此时,社区 ops4j.org 提供了一个名为“PAX”的丰富工具集,其中包括:

    • 帕克斯跑者 :轻松在Felix、Equinox、Knopflerfish和Concierge之间运行和切换
    • Pax构造 :建设、组织和;使用maven轻松构建OSGi项目
    • 帕克斯无人机 :在独立于框架的情况下,使用Junit测试您的OSGi捆绑包(使用PaxRunner)

    然后是OSGi纲要服务的许多实现:

    • Pax日志记录 (日志记录),
    • Pax Web (http服务),
    • Pax Web扩展器 (战争支援),
    • 帕克斯币 (配置),
    • 帕克斯壳牌 (shell实现,下一个osgi版本的一部分)
    • 还有更多。

    ..还有一个有用的、独立于框架的社区,但现在这就是广告;-)

        3
  •  5
  •   Jérôme Verstrynge    15 年前

    这个答案是在提出这个问题近3年后给出的,但 link 我刚刚发现 非常好 ,尤其是对于使用maven的初学者。一步一步的解释。

        4
  •  4
  •   Kamlesh    17 年前

    您现有的应用程序是单片的还是分层的?

    如果分层,您可以将中间层/应用层转换为在OSGi容器中运行。

    根据我的团队的经验,我们发现尝试在OSGi中做web工作很痛苦。其他痛点是Hibernate和Jakarta Commons Logging。

    我发现OSGi规范非常可读,我建议您打印出显示类加载算法的流程图。我保证你会有这样的时刻,“为什么我会得到NoClassDefFoundError?”:流程图会告诉你原因。

        5
  •  4
  •   Wazza    13 年前

    尝试 http://neilbartlett.name/blog/osgibook/ 这本书有OSGi最佳实践的实例。

        6
  •  3
  •   Robert P    18 年前

    尝试 http://njbartlett.name/files/osgibook_preview_20091217.pdf

    http://www.manning.com/hall/

    第二本书不是我自己读过的,但我听说过它的优点。

    第一个对我来说非常有用。他首先介绍了架构,然后介绍了OSGi。

        7
  •  3
  •   Andreas Kraft Vinod Joshi    7 年前

    如果你从OSGi开始,有几个想法需要记住。

    正如本线程其他地方提到的,了解类加载非常重要。根据我的经验,每个人迟早都会遇到问题。

    另一件需要记住的重要事情是:永远不要持有推荐信!看看构建OSGi服务概念的白板模式(请参阅其他答案之一中的链接)。

    根据我的经验,你不应该试图将单一的应用程序转换为基于OSGi的应用程序。这通常会导致严重且无法管理的混乱。重新开始。

    下载一个免费提供的独立OSGi实现。我发现Knopflerfish相当好且稳定(我在许多项目中都使用它)。它还附带了大量的源代码。你可以在这里找到它: http://www.knopflerfish.org

    另一个好的教程可以在这里找到。 https://pro40.abac.com/deanhiller/cgi-bin/moin.cgi/OsgiTutorial

    OSGi联盟的Peter Kriens接受了一次很好的采访: http://www.infoq.com/interviews/osgi-peter-kriens .他的主页和博客(这是一个很好的阅读可以在这里找到: http://www.aqute.biz

        8
  •  1
  •   dlinsin JaviAlgaba    18 年前

    我真的很喜欢 Apache Felix tutorials 然而,我认为一般来说,在你的应用程序中利用OSGi并不是那种“让我们使用这个框架,因为这是炒作”的决定。这更像是一个设计问题,但OSGi在设计方面给你的一切,你也可以用vanilla Java来实现。

    至于运行时,您不能只添加一个现有的应用程序并使其启用OSGi。它需要设计成动态的。Spring DM让你很容易隐藏它,但它仍然存在,你需要注意它。