1

我正在使用 Karaf 3.0.1 并且有两个片段包 A 和 B 附加到主机包 C。我能够安装 A,然后是 B,然后是 C,然后启动 C,一切正常。

但是,当我停止并启动 Karaf 时,主机通常会出现故障并且无法成功启动。两个片段都被列为“已解决”并显示为已附加到主机,并且主机显示它已附加到片段,但主机的状态为“失败”。日志文件中的异常是:

20140507 07:35:39.011 [ERROR] FelixStartLevel | 19:org.apache.aries.blueprint.core |
org.apache.aries.blueprint.container.BlueprintContainerImpl | Unable to start
blueprint container for bundle <host bundle name>
org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to load
class <class from 2nd fragment> from recipe BeanRecipe[name='<bean ID from second
fragment blueprint XML>']

如果我只部署一个片段,那么我可以重新启动 Karaf 并且主机可以正常启动。但是有两个片段,Karaf 可能会重新启动一次或两次,但随后会失败并且永远不会再次成功启动。我玩的是开始级别,让主机有更高/更晚的开始级别根本没有帮助。

我阅读了 OSGi 片段何时附加到主机?这似乎清楚地表明开始级别不会影响解决顺序,并且看到了使用提供/要求能力标头的建议。我试过了,看到了同样的行为,尽管再次使用单个片段它工作正常。

我还能做些什么来让它发挥作用?Karaf/Felix 中是否存在关于重启时同一主机的多个片段的错误?

是的,我宁愿不使用片段,而是将一个相当复杂的 Java EE 应用程序移植到 OSGi,鉴于我拥有的代码库,这是可行的方法,但如果我不能依赖于 Karaf 启动时正确启动的事情,这是行不通的。

谢谢,

凯文

4

0 回答 0