12.4. OSGi サービスの公開
12.4.1. 概要
このセクションでは、OSGi コンテナーで単純な OSGi サービスの生成、構築、およびデプロイ方法を説明します。このサービスは単純な Hello World Java クラスであり、OSGi 設定は Blueprint 設定ファイルを使用して定義されます。
12.4.2. 前提条件
Maven クイックスタートアーキタイプを使用してプロジェクトを生成するには、次の前提条件を満たす必要があります。
- Maven インストール: Maven は Apache の無料のオープンソースビルドツールです。最新バージョンは http://maven.apache.org/download.html からダウンロードできます (最小値は 2.0.9 です)。
- インターネット接続: ビルドの実行中、Maven は追加設定を必要とせずに動的に外部リポジトリーを検索し、必要なアーティファクトをダウンロードします。これを機能させるには、ビルドマシンがインターネットに接続されている 必要 があります。
12.4.3. Maven プロジェクトの生成
maven-archetype-quickstart
アーキタイプは汎用の Maven プロジェクトを作成し、それを目的に合わせてカスタマイズできます。コーディネート org.fusesource.example:osgi-service
を使用して Maven プロジェクトを生成するには、次のコマンドを入力します。
mvn archetype:create -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=org.fusesource.example -DartifactId=osgi-service
このコマンドの結果は、生成されたプロジェクトのファイルを含むディレクトリー ProjectDir/osgi-service
です。
既存の製品のグループ ID と競合するアーティファクトのグループ ID を 選択しない ように 注意 してください。これにより、プロジェクトのパッケージと既存の製品のパッケージが競合する可能性があります (通常、グループ ID はプロジェクトの Java パッケージ名のルートとして使用されるため)。
12.4.4. POM ファイルのカスタマイズ
OSGi バンドルを生成するには、次のように POM ファイルをカスタマイズする必要があります。
- 「バンドルプロジェクトの生成」 で説明されている POM のカスタマイズ手順に従います。
Maven バンドルプラグインの設定で、以下のようにバンドルの手順を変更して
org.fusesource.example.service
パッケージをエクスポートします。<project ... > ... <build> ... <plugins> ... <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Bundle-SymbolicName>${pom.groupId}.${pom.artifactId}</Bundle-SymbolicName> <Export-Package>org.fusesource.example.service</Export-Package> </instructions> </configuration> </plugin> </plugins> </build> ... </project>
12.4.5. サービスインターフェイスの作成
ProjectDir/osgi-service/src/main/java/org/fusesource/example/service
サブディレクトリーを作成します。このディレクトリーで、お気に入りのテキストエディターを使用してファイル HelloWorldSvc.java
を作成し、例12.3「HelloWorldSvc インターフェイス」 からコードを追加します。
例12.3 HelloWorldSvc インターフェイス
package org.fusesource.example.service; public interface HelloWorldSvc { public void sayHello(); }
12.4.6. サービスクラスの作成
ProjectDir/osgi-service/src/main/java/org/fusesource/example/service/impl
サブディレクトリーを作成します。このディレクトリーで、お気に入りのテキストエディターを使用してファイル HelloWorldSvcImpl.java
を作成し、例12.4「HelloWorldSvcImpl クラス」 からコードを追加します。
例12.4 HelloWorldSvcImpl クラス
package org.fusesource.example.service.impl; import org.fusesource.example.service.HelloWorldSvc; public class HelloWorldSvcImpl implements HelloWorldSvc { public void sayHello() { System.out.println( "Hello World!" ); } }
12.4.7. Blueprint ファイルの書き込み
Blueprint 設定ファイルは、クラスパスの OSGI-INF/blueprint
ディレクトリーに格納されている XML ファイルです。Blueprint ファイルをプロジェクトに追加するには、最初に次のサブディレクトリーを作成します。
ProjectDir/osgi-service/src/main/resources ProjectDir/osgi-service/src/main/resources/OSGI-INF ProjectDir/osgi-service/src/main/resources/OSGI-INF/blueprint
src/main/resources
は、すべての JAR リソースの標準的な Maven の場所になります。このディレクトリーの下のリソースファイルは、生成されたバンドル JAR のルートスコープに自動的にパッケージ化されます。
例12.5「サービスをエクスポートするための Blueprint ファイル」 は、bean
要素を使用して、HelloWorldSvc
Bean を作成し、service
要素を使用して Bean を OSGi サービスとしてエクスポートする Blueprint ファイルのサンプルを示しています。
ProjectDir/osgi-service/src/main/resources/OSGI-INF/blueprint
ディレクトリーの下で、お気に入りのテキストエディターを使用して config.xml
ファイルを作成し、例12.5「サービスをエクスポートするための Blueprint ファイル」から XML コードを追加します。
例12.5 サービスをエクスポートするための Blueprint ファイル
<?xml version="1.0" encoding="UTF-8"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> <bean id="hello" class="org.fusesource.example.service.impl.HelloWorldSvcImpl"/> <service ref="hello" interface="org.fusesource.example.service.HelloWorldSvc"/> </blueprint>
12.4.8. サービスバンドルの実行
osgi-service
プロジェクトをインストールおよび実行するには、以下の手順を実行します。
プロジェクトをビルドします — コマンドプロンプトを開き、
ProjectDir/osgi-service
ディレクトリーに移動します。Maven を使用して、次のコマンドを入力してデモをビルドします。mvn install
このコマンドが正常に実行される場合、
ProjectDir/osgi-service/target
ディレクトリーには、バンドルファイルosgi-service-1.0-SNAPSHOT.jar
が含まれている必要があります。osgi-service バンドルをインストールして開始する: Red Hat Fuse コンソールで、次のコマンドを入力します。
Jkaraf@root()> bundle:install -s file:ProjectDir/osgi-service/target/osgi-service-1.0-SNAPSHOT.jar
ProjectDir は Maven プロジェクトを含むディレクトリーで、
-s
フラグはバンドルをすぐに起動するように指示します。たとえば、Windows マシンのプロジェクトディレクトリーがC:\Projects
の場合、以下のコマンドを入力します。karaf@root()> bundle:install -s file:C:/Projects/osgi-service/target/osgi-service-1.0-SNAPSHOT.jar
注記Windows マシンでは、
file
URL のフォーマット方法に注意してください。file
URL ハンドラーが認識する構文の詳細は 「ファイル URL ハンドラー」 を参照してください。サービスが作成されたことを確認する: バンドルが正常に開始されたことを確認するには、次の Red Hat Fuse コンソールコマンドを入力します。
karaf@root()> bundle:list
このリストのどこかに、
osgi-service
バンドルの行が表示されるはずです。以下に例を示します。[ 236] [Active ] [Created ] [ ] [ 60] osgi-service (1.0.0.SNAPSHOT)