2010年12月18日土曜日

5.2.7 サービスの特定 (Locating Services)

サービスオブジェクトを使用してそのメソッドを呼び出すためには, バンドルはまず ServiceReference オブジェクトを取得しなければならない. バンドルがフレームワークから ServiceReference オブジェクトを取得するための方法として, BundleContext インターフェースに二つのメソッドが定義されている:

In order to use a service object and call its methods, a bundle must first obtain a ServiceReference object. The BundleContext interface defines two methods a bundle can call to obtain ServiceReference objects from the Framework:

  • getServiceReference(String) ─ このメソッドは, String で指定されたサービスインターフェースを実装し, そのサービスインターフェース名のもとに登録されているサービスオブジェクトへの ServiceReference オブジェクトを返す. 条件を満たすサービスオブジェクトが複数存在する場合, 最も高い SERVICE_RANKING を持つサービスオブジェクトが返される. ランキングが同じ場合, 一番低い SERVICE_ID を持つサービスオブジェクト (最初に登録されたサービスオブジェクト) が返される.

  • getServiceReference(String) - This method returns a ServiceReference object to a service object that implements, and was registered under, the name of the service interface specified as String. If multiple such service objects exist, the service object with the highest SERVICE_RANKING is returned. If there is a tie in ranking, the service object with the lowest SERVICE_ID (the service object that was registered first) is returned.

  • getServiceReferences(String,String) ─ このメソッドは次の条件を満たす ServiceReference オブジェクトの配列を返す:
  1. 指定されたサービスインターフェースを実装し, そのサービスインターフェース名のもとに登録されている.
  2. 指定された検索フィルターの条件を満たす. フィルター構文については 133 ページの「フィルター」に説明がある.

  • getServiceReferences(String,String) - This method returns an array of ServiceReference objects that:
  1. Implement and were registered under the given service interface.
  2. Satisfy the search filter specified. The filter syntax is further explained in Filters on page 133.

適合するサービスオブジェクトが存在しない場合は両メソッドとも null を返さなければならない. それ以外の場合は, 呼び出し元は一つ以上の ServiceReference オブジェクトを受け取ることになる. これらのオブジェクトは, サービスオブジェクトのプロパティーを取り出したり, BundleContext オブジェクトを介して実際のサービスオブジェクトを取得するのに使用することができる.

Both methods must return null if no matching service objects are returned. Otherwise, the caller receives one or more ServiceReference objects. These objects can be used to retrieve properties of the underlying service object, or they can be used to obtain the actual service object via the BundleContext object.

両メソッドとも, 返却されるサービスリファレンスに対応するサービスオブジェクトを取得するのに必要な ServicePermission [ServiceReference, GET] パーミッションを, 呼び出し元が持っていることを要求する. 呼び出し元が必要なパーミッションを持っていない場合, これらのメソッドの返却値に当該サービスリファレンスを含めてはならない.

Both methods require that the caller has the required ServicePermission[ServiceReference, GET] to get the service object for the returned Service Reference. If the caller lacks the required permission, these methods must not include that Service Reference in the return.