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は、3本の異なる束です。
Karafを起動すると、Bが登録され、doRegisterが呼び出されます。ただし、サービスAは準備ができていません(aはヌルです)。
私は次のことを試してみました:
- がBよりも低く、何かのスタートレベルを設定し...仕事リストにピックアップにBの登録を
- を仕事と実際に使用していませんでした後でCが活性化された。うまくいかず、コードが乱雑になった。
- は、doRegisterの注釈でこの要件を書き込む方法を探しました - できません。
- 私はサービスロケータを使用しようとしましたが、Cの起動メソッドでコンテキストを取得しようとしました - 動作しなかった、Karafをクラッシュしました。
明らかに何か不足している必要がありますか、同様の問題を経験して解決策を見つけた人はいますか?
更新: 参照a IAに変更されました。参照B()に関する忘れた情報を追加しました。 A
とB
への言及は、静的、必須の参照であるので、あなたが提供するサンプルコード、C
はA
とB
まで活性化することが習慣に基づいて
サンプルクラスは完成していますか?多分Bはインプリメントされていて、インターフェイスはありませんか? –
指摘してくれてありがとう。しかし、はいA、B、およびCはインターフェイスによってバックアップされており、問題は残ります。 –
githubなどの完全な小さな例を投稿できますか? –