1

iPOJO は、プリミティブ型コンポーネントのインスタンスを含むコンポジットを作成するメカニズムを提供します。iPOJO が、複合サブインスタンスによって提供されるサービスを複合の外部からアクセスされないように分離するメカニズムを理解することに興味があります。

たとえば、次の構成があるとします (iPOJO API を使用):

 PrimitiveComponentType prov = createAProvider(); // Create a primitive type
 PrimitiveComponentType cons = createAConsumer(); // Create another primitive type

       CompositeComponentType type = new CompositeComponentType()
           .setBundleContext(context)
           .setComponentTypeName("comp1")
           .addInstance(new Instance(prov.getFactory().getName())) // Create an instance in the composite
           .addInstance(new Instance(cons.getFactory().getName())); 

       ComponentInstance ci = type.createInstance();

コンポーネント「prov」が というサービス インターフェイスを実装しているとしますHelloService。このサービスが分離されているとはどういう意味ですか?

サービス参照を使用して外部バンドル (コンポジットの一部ではない) からサービスにアクセスしようとした場合、次のことを意味しますか?

   ServiceReference ref = 
                  context.getServiceReference(HelloService.class.getName());

スコープがコンポジットの外にあるため、この参照は本当に失敗するのでしょうか?

コンポジット内のコンポーネントに、コンポジット外で公開されたサービスへの参照が含まれている場合はどうなるでしょうか? この参照も失敗しますか?

注: 今のところ、インポートまたはエクスポートされたサービスには興味がありません。

4

1 に答える 1

0

iPOJO コンポジットは、iPOJO サービス コンテキストに依存しています。iPOJO では、通常の OSGi バンドル コンテキストは 2 つの部分で構成されています。クラスのロード アクティビティを担当するバンドル中心の部分と、すべてのサービス インタラクション (パブリケーション、ルックアップ、バインディングなど) を担当するサービス中心の部分です。

インスタンスがコンポジット内で実行される場合、ローカル サービス レジストリ (コンポジットからのもの) を使用して、「ローカル」サービス コンテキストとしてインスタンスが実行されます。したがって、コンポジットの内部から登録されたサービスは、コンポジットのサービスと OSGi フレームワークのサービスという 2 つの異なるサービス レジストリを使用しているため、外部からアクセスすることはできません。

于 2014-02-16T07:13:35.117 に答える