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

我有兴趣使用 操作系统Gi 在我的应用程序中。我们是一家 Java 商店,我们广泛使用 Spring,所以我倾向于使用 OSGi(tm) 服务平台的 Spring 动态模块. 。我正在寻找一种好方法,将一点 OSGi 合并到应用程序中作为试用。这里有人使用过这个或类似的 OSGi 技术吗?有什么陷阱吗?

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

@david - 感谢您的链接!理想情况下,对于一个全新的应用程序,我会将整个事情设计得充满活力。不过,我现在正在寻找的是在现有应用程序的一小部分中引入它。假设我可以选择应用程序的任何部分,那么需要考虑哪些因素来使该部分作为 OSGi 豚鼠变得更好或更差?

有帮助吗?

解决方案

好吧,由于您不能拥有一部分 OSGi 和一部分非 OSGi,因此您需要将整个应用程序制作为 OSGi。以最简单的形式,您可以从整个应用程序中创建一个 OSGi 包。显然,这不是最佳实践,但它对于了解在 OSGi 容器(Equinox、Felix、Knoplerfish 等)中部署包的感觉可能很有用。

为了将其提升到一个新的水平,您需要开始将应用程序拆分为组件,组件通常应该具有一组职责,可以通过一组接口和类依赖项将它们与应用程序的其余部分隔离。纯粹手动识别这些内容可能会非常简单,对于设计良好的高内聚但松散耦合的应用程序来说是相当简单的,对于您不熟悉的互锁源代码来说则是一场噩梦。

一些帮助可以来自诸如 J依赖 它可以向您展示 Java 包与系统中其他包/类的耦合。具有低传出耦合的包应该比具有高传出耦合的包更容易提取到 OSGi 包中。使用专业工具可以获得更多架构洞察,例如 结构101.

纯粹在技术层面上,每天使用由 160 个 OSGi 包组成的应用程序并使用 Spring DM,我可以确认从“正常”Spring 到 Spring DM 的过渡基本上是轻松的。额外的命名空间以及您可以(并且应该)将特定于 OSGi 的 Spring 配置隔离在单独的文件中这一事实,使得拥有和不拥有 OSGi 部署方案变得更加容易。

OSGi 是一个深入而广泛的组件模型,我推荐的文档:

  • OSGi R4 规范: :获取 Core 和 Compendium 规范的 PDF,它们是规范的、权威的且可读性很强。随时有方便的捷径,您将查阅它们。
  • 阅读 OSGi 最佳实践,您可以了解很多内容 只做一些较小的事情 应该 有些事情你应该做 永远不会做 (动态导入:* 例如)。

一些链接:

其他提示

当学习新技术时,丰富的工具可以让你轻松入门。此时社区在 ops4j.org 提供了一个名为“PAX”的丰富工具集,其中包括:

  • 帕克斯跑者: :轻松运行并在 Felix、Equinox、Knopflerfish 和 Concierge 之间切换
  • 和平建设: :使用 Maven 轻松构建、组织和构建 OSGi 项目
  • 帕克斯无人机: :使用 Junit 测试您的 OSGi 捆绑包,同时保持框架独立(使用 PaxRunner)

OSGi compendium 服务的实现有很多:

  • 帕克斯记录 (记录),
  • 和平网 (http服务),
  • Pax 网络扩展器 (战争支援),
  • 帕克斯币 (配置),
  • 帕克斯壳牌 (shell 实现,下一个 osgi 版本的一部分)
  • 以及更多。

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

这个答案是在问题提出近三年后才给出的,但是 关联 我刚刚发现是 真的很好, ,特别是对于使用 Maven 的初学者。一步一步的解释。

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

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

根据我团队的经验,我们发现尝试在 OSGi 中执行 Web 操作非常痛苦。其他痛点包括 Hibernate 和 Jakarta Commons Logging。

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

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

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

或者

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

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

第一个对我来说非常有用。他首先带您了解该架构,然后实际操作 OSGi。

如果您开始使用 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

我真的很喜欢 Apache Felix 教程. 。然而,我认为总的来说,在应用程序中利用 OSGi 并不是“让我们使用这个框架,因为它是炒作”的决定之一。这更多的是一个设计问题,但是 OSGi 在设计方面为您提供的一切,您也可以通过普通 Java 获得。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top