はじめに
OSGi ServiceはEclipseのプラグインにも使われている技術です。理解していなかったので、勉強がてらチュートリアルをやってみます。
OSGi(Open Service Gateway Initiative)はJavaにおいて堅牢で疎結合かつ動的なアプリケーションを構築するためのモジュール化されたアプローチと仕様です。この仕様には複数の実装があります。
OSGiを使う利点は以下の通りです。
- モジュール性
- アプリケーションを管理しやすい単位に分割でき、保守や更新が容易になる
- 動的な更新
- JVWの再起動をせずに、実行中のモジュール(バンドル)を更新または差し替えができる
- サービス指向
- 明確に定義されたインターフェースを通じて、コンポーネント同士がやり取りするサービス指向アーキテクチャを推進する
- クラスローダーの分離
- 各OSGiバンドルは独自のクラスローダーで動作するため、依存関係が明確に分離され、バンドル間の予期しない干渉を防ぐことができる
OSGi declative servies (OSGi DS)について
プラグインの設定で以下のような項目があり、気になっていたので簡単に調べました。

OSGi DSはメタデータを通して、サービスの定義や利用ができます。Eclipseなどのツールはコードにアノテーションされた結果に基づいて、メタデータを生成します。
例えば以下のようにアノテーションをすることでOSGiサービスを提供できます。
import org.osgi.service.component.annotations.Component;
@Component
public class Sample {
// This is sample
}
OSGiサービスの種類
OSGiサービスは以下の種類があります。
- delayed component
- リクエストがされるまで、サービスは活性化しません。したがって、クラスや実装が遅れてロードされます。
- immediate component
- 依存関係が満たされた場合サービスがすぐに活性化します。
- factory component
- リクエストによって新しいサービスが作られ、活性化されます。
OSGiサービスを作ってみる
簡単なOSGiサービスを作成します。
プロジェクトの作成
[File] > [New] > [Plug-in Project]とクリックし、プラグインプロジェクトを作成する

[Next >]をクリックする。“This plug-in will make contributions to the UI"のチェックが外れていることを確認する

[Finish] をクリックする。
DS Annotaionsの有効化
プロジェクトを右クリックし、[Properties]を選択する。
[Plug-in Development] > [DS Annotations]の項目を選択し、“Enable project-specific settings"にチェックを付け、[Apply and Close]をクリックします。

サンプルプログラムの作成
今回は起動時にHello Worldと表示するサービスを作ってみる。
パッケージ名は com.kitsutsuki.sample.printer
とする。
package com.kitsutsuki.sample.printer;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
@Component
public class HelloWorld {
@Activate
public void activate() {
System.out.println("Activate called");
System.out.println("Hello World");
}
}
デバッグ実行
プロジェクトを右クリックし、[Debug As] > [Debug Configurations…] をクリックする
[OSGi Framework] を右クリックし、[New Configuration]をクリックする
以下のようにデバッグ名を入れる1。

共有しやすいように[Common] > Shared fileを設定する。

[Debug]を押す。
Cosoleビューを見ると以下のように表示される。

サービスとして登録されているかを確認するためにssとコマンドを打つ。以下のように登録されていることを確認できる。

おわりに
Eclipseは使いづらいエディタだと思っていましたが、Javaを使うと本当に使いやすいなと最近感じています。
参考
- Getting Started With OSGi
- OSGi Modularity and Services - Tutorial
- Tutorial: Building your first OSGi Remote Service
- Getting Started with OSGi Remote Services - PDE Edition
- 1. Introduction into software modularity with OSGi
非表示用に付箋を前に出しました。 ↩︎