我在使用通过Karaf使用OSGi声明式服务时加载组件的顺序时遇到问题。声明式服务引用多个引用和依赖关系
予有这种情况:
@Component
public class A implements IA
{
doSomething() {...}
}
@Component
public class B implements IB
{}
@Component
public class C implements IC
{
@Reference
IA a
@Reference
(cardinality = ReferenceCardinality.MULTIPLE,
policyOption = ReferencePolicyOption.GREEDY,
unbind = "doUnRegister")
void doRegister(IB b)
{
a.doSomething()
}
void doUnregister(IB b)
{
...
}
}
A,B,和C是三种不同的束。
当启动Karaf时,B被注册并且调用doRegister。但是:服务A没有准备好(a为空)。
我试过如下:
- 组A的启动级别,以低于B低的东西......没在工作列表工作
- 皮卡B的注册和实际使用一之后当C被激活时。没有工作和代码混乱。
- 通过doRegister注释找到了一个写这个需求的方法 - 不可能。
- 我试图使用服务定位器并通过C - DID NOT WORK上的激活方法获取上下文,它使Karaf崩溃。
我必须明确地遗漏一些东西,有没有人遇到类似的问题,并找到了解决办法?
UPDATE: 参考文献A a改为IA a。在参考文献B()上添加了被遗忘的信息。
您的示例类是否完整? B可能实现和接口,A不? –
谢谢指出。但是,A,B和C是由接口支持的,问题依然存在。 –
你可以发布一个完整的小例子到github或类似的吗? –