我正在使用Karaf 3.0.1并且有两个连接到主机包C的片段A和B.我能够安装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并且主机启动正常。但是有两个片段,卡拉夫可能会重启一次或两次,但随后失败并再也没有成功开始。我玩起始等级并让主机有更高/更高的开始等级根本没有帮助。
我看过When is an OSGi fragment attached to host?,似乎清楚地表明启动级别不会影响解析顺序,并且看到了使用Provide / Require-Capability标头的建议。我尝试过并看到相同的行为,虽然再次使用单个片段它可以正常工作。
我还能做些什么才能让它发挥作用?在重启时,Karaf / Felix中是否存在关于同一主机的多个片段的错误?
是的,我宁愿不使用片段,而是将一个相当复杂的Java EE应用程序移植到OSGi,这是根据我的代码库有效的方法,但是如果我不能依赖于正确启动的东西卡拉夫开始,这是行不通的。
谢谢,
凯文