2

コンポーネントにサービス参照を挿入するために、OSGI felix プラットフォームで SCR フレームワークを使用しています。オプションの依存関係を除いて、これはうまく機能します。したがって、Foo と Bar の 2 つのコンポーネントがある場合、Foo は以下のようになります。

@Component
public class FooImpl implements Foo {
    Log log = LogFactory.getLog(this.getClass());
    @Reference(cardinality=ReferenceCardinality.OPTIONAL_UNARY)
    Bar bar;

    public void bindBar(Bar bar) {
        log.info("bar bound: "+bar);
    }
    public void unbindBar(Bar map) {
        log.info("bar unbound: "+bar);
    }

    @override
    public void fooHello() {
        log.info("Hello, this is an implementation of Foo");
    }
}

Bar のインターフェースを定義するバンドルが私の OSGi プラットフォームにデプロイされている限り、これは機能します。プラットフォームで Bar 実装コンポーネントがアクティブ化されていない場合でも、SCR は問題なく、もちろん Bar 実装を参照せずに、私の FooImpl コンポーネントをアクティブ化します。ただし、Bar インターフェイスがプラットフォームにデプロイされていない場合、コンポーネントのアクティブ化中に SCR がクラッシュします。これは、おそらくリフレクションによるコンポーネントの検査からの例外が原因ですが、それを明確に判断することはできませんでした。

では、これらのオプションの OSGi 依存関係から来るインターフェイスへのオプションの参照を持つ SCR コンポーネントを含む、プラットフォームに存在しないオプションの依存関係を持つ OSGI バンドルを展開する方法はありますか?

4

1 に答える 1