OSGi サービスの使用
サービスの登録と登録抹消は、非同期にいつでも行うことができます。 そのため、サービスを呼び出す期間は、できるだけ短くしてください。 ServiceTracker クラスを使用して、サービスの可用性を並行してトラッキングすることができます。
このタスクについて
サービスをトラッキングする場合は、バンドル・コンテキスト、必要なインターフェース、突き合わせるプロパティーを使用して ServiceTracker オブジェクトを作成し、 トラッカーをオープンします。 トラッカーで最適な一致またはすべての一致を照会できます。 サービスは、使用後に占有しないようにしてください。 完了したことをトラッカーに知らせる必要はありません。トラッカーは、一致するサービスを内部的にキャッシュに入れ、登録抹消時にそれらをクリアします。トラッカーを使用し終わったら、 serviceTracker.close() メソッドを使用してクローズします。
例
以下の例では、ServiceTracker オブジェクトを使用してサービスをトラッキングする方法を示します。
package com.ibm.foo.tracker;
import com.ibm.foo.simple.Foo;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
/**
* Simplest use of a ServiceTracker to get a service
*/
public class TrackingFooUser
{
private ServiceTracker<Foo,Foo> serviceTracker;
public TrackingFooUser( BundleContext bundleContext )
{
serviceTracker = new ServiceTracker<Foo, Foo>( bundleContext, Foo.class, null );
serviceTracker.open();
}
public void doFoo() {
Foo foo = serviceTracker.getService();
//use foo
//no need to return it... just don't use it for long.
}
public void shutdown() {
serviceTracker.close();
}
}