TOPシステム開発> サービスの登録・削除を行うBundleContextとServiceRegistration
Equinox
先取りJava SE 7!

第4回:Bundleの連携の制御の仕組みを理解しよう!

著者:チェンジビジョン  近藤 寛喜   2007/8/22
前のページ  1  2  3  次のページ
サービスの登録・削除を行うBundleContextとServiceRegistration

   ServiceActivator#startメソッドとServiceActivator#stopメソッドでは、「org.osgi.framework.BundleContext」のインスタンスに対してサービスの追加・削除を行っています。「org.osgi.framework.BundleContext」インターフェースはOSGiフレームワーク全体で共有するサービスの制御や、Bundleの情報を取得するためのメソッドを規定したものです。BundleからOSGiフレームワーク全体の情報へアクセスするときは、このインターフェースを介してアクセスします。

   BundleContext#registerServiceメソッドでBundleContextにサービスを追加しています。BundleContextの主要なメソッドを表1に示します。
メソッド名 役割
registerService
(String,Object,Dictionary)
BundleContextにサービスを登録します。Dictionaryにはサービスのプロパティを登録します。サービスのプロパティには優先度などが登録できます。指定できるプロパティは「org.osgi.framework.Constants」クラスに まとめられています。
getBundles() OSGiフレームワークにインストールされているすべてのBundleを取得します。他のBundleを参照するためにはBundleの名前の方が扱いやすいので、他のBundleを参照したい場合は主に使用するのはこちらでしょう。
getBundle(long) OSGiフレームワークにインストールされているBundleを取得します。残念ながらAPIにはBundleのIDを指定するものしか用意されていません。
getBundle() このBundleContextを参照しているBundleクラスを返却します。BundleContextはBundleクラスごとに用意されます。

表1:org.osgi.framework.BundleContextの主要なメソッド

   サービスの削除には「org.osgi.framework.ServiceRegistration」インターフェースを利用します。また、ServiceRegistrationインターフェースはサービスのプロパティ情報の登録を行うなどサービスの登録情報を操作するインターフェースを規定しています。

   リスト2-2で登録しているのは「jp.co.thinkit.equinox.hello.ui.INotificationService」インターフェースを実装した「jp.co.thinkit.equinox.hello.service.HelloNotificationService」クラスです。このINotificationServiceインターフェースはOSGiのインターフェースではなく、筆者が規定したインターフェースです。

   このINotificationServiceインターフェースは「jp.co.thinkit.equinox.hello.ui」プロジェクトで定義しています(リスト3)。

リスト3:jp.co.thinkit.equinox.hello.ui.INotificationServiceインターフェース
(省略)
public interface INotificationService {
   public List<? extends INotificationMessage> getContents();
}

   INotificationMessageインターフェースはティッカーへ表示するコンテンツを保持するモデルを定義したものです。このインターフェースも「jp.co.thinkit.equinox.hello.ui」プロジェクトで定義されています。ティッカー表示に新しい通知を組み入れる場合はINotificationServiceインターフェースを実装し、BundleContextのインスタンスへ登録します。

   このようにBundleContextのインスタンスへ登録するサービスはアプリケーションの開発者が作成できます。

   OSGiフレームワークへ登録できるサービスには、ただのJava Objectを登録することもできます。サービスを登録するときに、そのサービスのインターフェースを明らかにしておくため、インターフェースの名前を基に登録してください。

前のページ  1  2  3  次のページ


株式会社チェンジビジョン 近藤 寛喜
著者プロフィール
株式会社チェンジビジョン  近藤 寛喜
モデリングツールJUDEを開発しているチェンジビジョンにて、プロジェクトの現在を見える化し、状況を共有することで現場で起きている問題を解決するためのツールTRICHORDを開発している。以前からオープンソースのプロジェクトに興味を持ち、特にEclipseプラットフォームに心酔している。最近はゲームの操作感を刷新したWiiリモコンを使って何か面白いUIが作れないか模索している。


INDEX
第4回:Bundleの連携の制御の仕組みを理解しよう!
  ネットワーク上にあるBundleも指定できる!
サービスの登録・削除を行うBundleContextとServiceRegistration
  サービスを利用するためにBundleContextに登録されているサービスの追跡を行うServiceTracker