【问题标题】:What's the best way to get started with OSGI? [closed]开始使用 OSGI 的最佳方式是什么? [关闭]
【发布时间】:2010-09-06 04:18:42
【问题描述】:

是什么让模块/服务/应用程序功能位特别适合 OSGi 模块?

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

@Nicolas - 谢谢,我看过那个。这是一个很好的教程,但我正在寻找更多关于如何制作我的第一个“真正的”OSGi 包的想法,而不是 Hello World 示例。

@david - 感谢您的链接!理想情况下,使用全新的应用程序,我会将整个事物设计为动态的。不过,我现在正在寻找的是在现有应用程序的一小部分中引入它。假设我可以选择应用程序的任何部分,有哪些因素可以使该部分成为更好或更差的 OSGi 豚鼠?

【问题讨论】:

    标签: java spring osgi


    【解决方案1】:

    如果您从 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

    【讨论】:

      【解决方案2】:

      好吧,既然您不能拥有一部分 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:获取核心和纲要规范的 PDF,它们是规范的、权威的且可读性强。随时准备好通往他们的捷径,您会向他们咨询。
      • 阅读 OSGi 最佳实践,您可以做的事情很多,但您应该做的事情要少一些,还有一些事情是您需要做的应该永远不要(例如DynamicImport:*)。

      部分链接:

      【讨论】:

        【解决方案3】:

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

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

        第二本不是我自己读过的书,但我听说过它的好东西。

        第一个对我非常有用。他最初会带您了解体系结构,然后介绍 OSGi。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            在学习新技术时,丰富的工具可以让您轻松应对各种事情。 此时,ops4j.org 社区提供了一个名为“PAX”的丰富工具集,其中包括:

            • Pax Runner:在 Felix、Equinox、Knopflerfish 和 Concierge 之间轻松运行和切换
            • Pax Construct:使用 maven 轻松构建、组织和构建 OSGi 项目
            • Pax Drone:使用 Junit 测试您的 OSGi 包,同时独立于框架(使用 PaxRunner)

            那么OSGi纲要服务的实现有很多:

            • Pax 日志记录(日志记录),
            • Pax Web(http 服务),
            • Pax Web Extender(战争支持),
            • Pax Coin(配置),
            • Pax Shell(shell 实现,下一个 osgi 版本的一部分)
            • 等等。

            .. 并且有一个有用的、框架独立的社区,- 但现在是广告 ;-)

            【讨论】:

              【解决方案6】:

              试试http://neilbartlett.name/blog/osgibook/。本书提供了 OSGi 最佳实践示例。

              【讨论】:

                【解决方案7】:

                您现有的应用程序是单一的还是分层在单独的进程/层中?

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

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

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

                【讨论】:

                • 在哪里可以找到此流程图?
                • @dubdubdubdot:我认为他的意思是Bundle Life-Cycle 流程图。
                【解决方案8】:

                我真的很喜欢Apache Felix tutorials。但是,我认为通常在您的应用程序中利用 OSGi 并不是“让我们使用这个框架,因为它是炒作”的决定之一。这更像是一个设计问题,但是 OSGi 在设计方面为您提供的一切,您也可以使用 vanilla Java。

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

                【讨论】:

                  猜你喜欢
                  • 2012-09-21
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-06-16
                  • 1970-01-01
                  • 2011-07-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-01-11
                  相关资源
                  最近更新 更多