私はOSGiを初めて使用しますが、バンドルの追跡について疑問があります。特定のバンドルが必要で、どのバンドルを使用しているかをIDで知りたいので、BundleTrackerを使用しています。一部のバンドル(3)は、同じインターフェースを実装しています。そのインターフェイスを実装するバンドルだけを追跡したいと思います。これどうやってするの?
1 に答える
特定のサービスを選択する場合は、そのサービス プロパティを使用できます。これは、バンドルに完全に依存しません。つまり、サービスの実装を特定のプロパティに登録するということです (これがDictionary
-argumentのBundleContext.registerService
目的です)。
次に、正しいプロパティを持つサービスのみを選択BundleContext.getServiceReferences
するフィルター式 (構文については、こちらで説明されています) を使用して指定できます。これを設定して、常に最大 1 つの要素を持つ配列またはコレクションを取得することができます。
宣言的なサービスを使用すると、提供コンポーネントと消費コンポーネントのサービス記述子でプロパティとフィルターをそれぞれ指定できるため、これはすべてはるかに簡単になります。構成管理を介して、その一方または両方の端を構成可能にすることもできます(サービス コンポーネントの構成のプロパティは、公開されたサービスまたは消費された参照のプロパティとして伝達されます)。OSGi で本格的な作業を開始する前に、宣言型サービスを確認することを強くお勧めします。
このようにハードコーディングされた配線を実装しないように注意する必要があります。モジュール性が損なわれるからです。