2

2 つの実装を持つインターフェイスがあります。両方の実装を OSGi サービスとして公開したいのですが、そうすると、一方が他方をオーバーライドします。私がやっている設定を見つけてください:

<bean id="formService" class="com.dbt.form.service.FormService"/>
<bean id="formAPIService" class="com.dbt.form.service.FormAPIService"/>
<osgi:service 
    ref="formAPIService" 
    interface="com.dbt.form.service.ifc.IFormService"/>
<osgi:service 
    ref="formService" 
    interface="com.dbt.form.service.ifc.IFormService" />

ここformServiceは実装によってオーバーライドさformAPIServiceれます。

この問題を解決する方法を教えてください。

4

2 に答える 2

8

2番目のサービスは最初のサービスをオーバーライドしません...これらのサービスは両方とも別々に公開されinpect cap service、OSGiGogoシェルでコマンドを入力することでこれを確認できます。

発生する可能性があるのは、コンシューマーコードが使用可能なサービスインスタンスの1つのみを選択することです。この場合、すべてのインスタンスにバインドするか、ランキングまたはターゲットフィルターの組み合わせを使用して、必要な特定のサービスを決定するようにコンシューマーを作成する必要があります。問題が発生する場所であるため、これらのサービスをどのように使用しているかについて、より多くの情報を提供する必要があります(おそらく)。

于 2012-09-18T22:23:59.257 に答える
3

このページを読む...第 8 章 サービスレジストリセクション 8.2.2.3.

osgi参照タグのbean-name属性を使用できます。サービスbean-nameをインポートしている間、エクスポート時にそのサービスのid属性を参照します。

于 2012-12-03T11:05:52.370 に答える