开始使用OSGI的最佳方法是什么?

时间:2008-08-19 13:20:49

标签: java spring osgi

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

我有兴趣在我的应用程序中使用OSGi。我们是一家Java商店,我们广泛使用Spring,所以我倾向于使用Spring Dynamic Modules for OSGi(tm) Service Platforms。我正在寻找一种将OSGi作为试用版纳入应用程序的好方法。有没有人在这里使用过这种或类似的OSGi技术?有任何陷阱吗?

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

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

8 个答案:

答案 0 :(得分:39)

好吧,既然你不能拥有一部分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最佳实践,你可以可以做很多事情,但是应该做的事情要少一些,而且有些事情你永远不会(例如,DynamicImport:*)。

一些链接:

答案 1 :(得分: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 Coin (配置),
  • Pax Shell (shell实现,下一个osgi发布的一部分)
  • 以及更多。

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

答案 2 :(得分:5)

这个答案在提出问题后差不多3年了,但我刚发现的link 非常好,特别是对于使用maven的初学者。逐步解释。

答案 3 :(得分:4)

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

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

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

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

答案 4 :(得分:4)

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

答案 5 :(得分:4)

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

OR

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

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

第一个对我来说非常有用。他最初带你完成了这个架构,然后是OSGi。

答案 6 :(得分:3)

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

正如本主题其他部分所述,了解类加载非常重要。根据我的经验,每个人迟早都会遇到问题。

要记住的另一件重要事情是:永远不要拿参考!看看构建OSGi服务概念的白板模式(参见其他答案中的链接)。

根据我的经验,您不应该尝试将monolitic应用程序转换为基于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

答案 7 :(得分:1)

我非常喜欢Apache Felix tutorials。但是,我认为一般来说,在你的应用程序中利用OSGi不是那些“让我们使用这个框架,因为它是炒作”的决定。这更像是一个设计问题,但是OSGi在设计方面为您提供的所有内容,您也可以使用vanilla Java。

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