1

私は Eclipse Virgo/Gemini ブループリントを使用しており、複数の実装を持つインターフェイスを持っています。

実装 1:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<bean id="MyID1"
    class="ImplementationCLass1">
</bean>

<service ref="MyID1"
    interface="MyInterface" />

実装 2:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<bean id="MYID2"
    class="ImplementationClass2">
</bean>

<service ref="MYID2"
    interface="MyInterface" />

実装 3:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<bean id="MyID3"
    class="ImplementationClass3">
</bean>

<service ref="MyID3"
    interface="MyInterface" />

そしてクライアント:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

<reference-list id="MyImplementations"
    interface="MyInterface" />

<bean id="clientID" class="ClientClass"
    init-method="startUp">

    <property name="services" ref="MyImplementations"></property>

</bean>

startUp メソッドは、リスト全体を反復処理して単純な文字列を出力する単純なメソッドです (テスト目的)。

問題は、クライアント バンドルをインストールすると、ツリー サービスのうち 2 つだけがリストに表示されることです。バンドルを停止して再度開始すると、3 つのサービスすべてがリストに表示されます。

アイデア/提案はありますか?

リストに MyInterface に一致するすべてのサービスを含める必要があることを乙女座に伝えることは可能ですか?

追加情報が必要な場合は、お気軽にお問い合わせください

4

2 に答える 2

2

参照リストの内容は動的であり、一致するサービスが出入りするときにアイテムが追加および削除されます。ただし、リストが変更されたときに通知される参照リスナーを実装して、利用可能なサービスを追跡することができます。ここでの議論と例

于 2013-01-23T09:51:09.313 に答える
1

リストには、任意の時点で一致するすべてのサービスが含まれていますMyInterfaceしかし、新しいサービスが登場します。

本当に、この「すべてのサービス」という概念は無意味です。後で誰かがいつでも新しいサービスを公開する可能性があるため、すべてのサービスを取得したかどうかを実際に知ることはできません. 最善の方法は、現在のサービスのスナップショットを取得し、後で新しいサービスが登場したときに動的に調整することです。

于 2013-01-24T00:22:05.710 に答える