2

osgi サービスを外部から、または他のバンドルから同期することは可能ですか?

OsgiService oS = retrieveService(BundleContext);

synchronized(oS){
...
}

バンドルの外部からの呼び出しが、特定のメソッドの実行中に変更を行うことを許可したくありません。

バンドルは登録され、アクティブです。Equinox フレームワークで作業しています。

4

2 に答える 2

1

特定の制約の下では、はい。Equinox フレームワークはサービスのプロキシを作成しないためです。ただし、システムの他の部分がこれらの呼び出しを同期する場合と同期しない場合があるため、これは非常に脆弱なソリューションです...

OSGi でサービスを置き換えることができることをご存知ですか? ユース ケースに適切なインターフェイスをすべてサポートするクラスを作成しますが、既存のサービスよりも高いSERVICE_RANKINGプロパティを持つサービスとして公開されます。これにより、サービスを検索するときにこのインスタンスが優先されます。現在、このクラスはすべてのメソッド呼び出しを元のサービスに委譲します。元のサービスは、Declarative Services、ServiceTracker、または BundleContext のいずれかを使用して取得します。いずれの場合も、SERVICE_RANKING のフィルターを使用します。これにより、すべてのメソッド呼び出しをインターセプトしてログに記録したり、それらを同期したりできます。

お役に立てれば...

于 2013-06-19T10:28:48.280 に答える