44

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

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

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

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

4

8 回答 8

41

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

一些链接:

于 2008-08-19T19:51:39.143 回答
9

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

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

然后有很多OSGi纲要服务的实现:

  • Pax Logging(日志记录),
  • Pax Web(http 服务),
  • Pax Web Extender(战争支持),
  • 帕克斯币(配置),
  • Pax Shell(shell 实现,下一个 osgi 版本的一部分)
  • 以及更多。

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

于 2008-09-30T09:45:46.577 回答
5

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

于 2011-04-24T00:14:06.560 回答
4

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

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

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

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

于 2008-08-19T21:51:54.610 回答
4

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

于 2008-09-27T19:24:17.863 回答
4

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

或者

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

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

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

于 2013-07-23T04:50:50.020 回答
3

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

于 2008-09-05T21:07:43.700 回答
1

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

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

于 2008-08-19T15:32:05.017 回答