如何确保在主机捆绑包之前安装我的OSGi片段?

pil*_*rth 4 java osgi jboss7.x

我正在尝试将guice部署到JBoss AS7(7.2.0-Alpha)中.这是一些罐子.我感兴趣的是

  • 吉斯
  • 吉斯-的servlet
  • 吉斯 - 坚持

guice是一个主机包,guice-servlet和guice-persist是这个主机的片段.

当我启动容器时,主机包总是被安装,解析并变为活动状态.片段总是被安装,有时会被解析并"包含"在主机包中,有时则不会.这似乎是随机的.

我也尝试了Eclipse Virgo并且行为是相同的,但是,它能够定义计划,通过定义安装顺序可以绕过这个问题.(无论如何,我似乎能够使它工作).

看看OSGi规范并阅读这个问题的答案,似乎这是预期的行为.JBoss是一个OSGi 4.2容器,因此Require-CapabilityProvide-Capability标题不是一个选项 - 而且我真的不想修改不是我的jar.

我怎么能让我的主机/片段包安装和可靠地解决?

我有一个想法(我不愿意做,因为它看起来不对)是使用maven-bundle-plugin/bndtools并将guice bundle合并到一个super-guice-bundle中 - 在构建时有效地做容器在runtme没有为我做什么.

Nei*_*ett 7

正如我在回答您链接到的问题时所述:如果在主机解析之前安装了片段,则片段将附加到主机.实现此目的的最简单方法是首先安装所有捆绑包(包括碎片),然后再允许其中任何捆绑包解析.

在许多情况下,尝试启动捆绑包会触发解决方案.人们在OSGi中犯的最常见错误之一就是在安装后立即尝试启动每个捆绑包.您不能这样做,即在安装要运行的所有软件包后才能启动任何软件包.