我在使用通過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或類似的嗎? –