OSGiエンタープライズ仕様では、サービス別またはバンドル別の2つの追跡方法が定義されています。
これら2つの方法の違いは何ですか?どちらの場合、ある方法を別の方法よりも使用する必要がありますか?
ありがとう
何を追跡するかによって異なります。
BundleTrackerはバンドルを追跡します。以下を参照してください。
また、ServiceTrackerはサービスインスタンスを追跡します。以下を参照してください。
したがって、バンドルで何が起こるかに興味がある場合は、BundleTrackerを使用します。また、サービスインスタンスに関心がある場合は、ServiceTrackerを使用します。
簡単に言えば、バンドルは瓶です。インストールされているか、正常に開始されているか、まだ開始されていないかなどを追跡できます。
バンドルは、0個以上のサービスを公開できます。OSGi用語でのサービスは、何かを行うためのメソッドを提供するライブJavaオブジェクトです。バンドルが存在する場合でも、そのサービスが消えている可能性があります(たとえば、バンドルが停止している、またはインストールされているがまだ開始されていないため)。バンドルがACTIVE状態であっても、サービスを提供するために何らかの条件を待機している可能性があります。サービスを登録および登録解除するときのバンドルの決定に完全に依存します。
最も一般的なケースでは、コードはサービスで機能します。たとえば、LogServiceを取得し、そのlog()メソッドを呼び出します。したがって、99%の場合、ServiceListenerに関心があるはずです(または、代わりにServiceTrackerを使用します。同じことを行いますが、いくつかの一般的な同期の落とし穴に対処します)。
お役に立てれば :)