读书人

EBA 启动有关问题解决办法

发布时间: 2012-10-24 14:15:58 作者: rapoo

EBA 启动问题解决方法

EBA 前期POC时的case测试得不够充分,当时多个EBA启动是没有问题的,当然这些测试的EBA之间都没有依赖关系。


最近在正式的项目中就到了问题。


问题是这样的,如果有两个EBA A和B,如果B中的bundle依赖A中的bundle,而在启动时如果bundle B比bundle A先启动(这个启动顺序我们没法控制,由系统随机启动),则bundle B中的bundle都无法启动,都是RESOLVED的状态。


这是因为,EBA B中的Bundle启动时默认都是立刻激活,但这个时候它依赖的(package 依赖)Bundle都还没有加载到OSGi container中,自然就只能是RESOLVED状态。


下面是Aires中启动Bundle的code:

if (b.getState() != Bundle.ACTIVE) {          b.start(Bundle.START_ACTIVATION_POLICY);          bundlesWeStarted.add(b);}
?


它启动时会参考MANIFEST.MF中设置的Activation Policy,也就是Bundle-ActivationPolicy参数,如果我们将它设成:

Bundle-ActivationPolicy: lazy
?


则Bundle会延迟加载,在依赖的bundle都加载后才会激活。

?

读书人网 >编程

热点推荐