この記事は、「Apache Felix の servicebased サンプルを Apache Karaf で動作させる – デスクトップアプリケーションの OSGi によるモジュール化(1/2)」の続きです。
この記事では、Apache Felix の servicebased サンプルを Apache Felix Gogo で動作せる手順を紹介します。
Apache Karaf は、コンテナという位置づけで、そのベースとなっているが Apache Felix です。Felix は OSGiサービスフラットフォームの実装という位置づけになるようです。
Karaf と Felix の違いがわかりにくいのですが、実際に使ってみると、Karaf は(コンソールからの)シェルや(ブラウザからの)WebUI を通して利用することが前提となっていて、使いやすく、さらに、サービスを稼働させる環境としても高機能です1)たとえばフェイルオーバーの仕組みを持っています。そのため、それらの機能を提供するために必要な Bundle を予め含んでいます。一方、Felix は、最低限の Bundle だけで構成されています。その中のひとつとして、Felix Gogo というシェル環境があります。これは、RFC 147 の実装のようなのですが、Karaf と比べ、かなり貧弱な印象を持ちます。しかし、 Karaf を使わない構成の場合は、外部からの Bundle の操作などで、必要なサービスとなるのでしょう。
ともあれ、この記事では、その Felix Gogo に、先日書いた記事で紹介した、servicebased サンプルをインストールして動作させる手順を紹介します。
先の記事と合わせて、OSGi ベースのアプリケーションの動かし方には、いくつかの方法があるということを紹介するのが目的です。
この記事では、Java8 と Apache Felix 4.6.0 を使っています。
● Apache Felix をダウンロードする
まず、任意のディレクトリに Felix をダウンロードします2)ダウンロードページはこちら。
$ wget http://ftp.tsukuba.wide.ad.jp/software/apache/felix/org.apache.felix.main.distribution-4.6.0.tar.gz
$ tar zxvf org.apache.felix.main.distribution-4.6.0.tar.gz
$ cd felix-framework-4.6.0
$ ls
DEPENDENCIES LICENSE.kxml2 bin conf felix-cache
LICENSE NOTICE bundle doc
● Felix を実行してみる
無事ダウンロードができたら実行してみます。
次の状態になれば、OKです。
$ java -jar bin/felix.jar
____________________________
Welcome to Apache Felix Gogo
g!
lb コマンドで、Bundle の一覧を表示し初期状態を把握しておきましょう。
____________________________
Welcome to Apache Felix Gogo
g! lb
START LEVEL 1
ID|State |Level|Name
0|Active | 0|System Bundle (4.6.0)
1|Active | 1|Apache Felix Bundle Repository (2.0.2)
2|Active | 1|Apache Felix Gogo Command (0.14.0)
3|Active | 1|Apache Felix Gogo Runtime (0.12.1)
4|Active | 1|Apache Felix Gogo Shell (0.10.0)
g!
では、「Apache Felix の servicebased サンプルを Apache Karaf で動作させる – デスクトップアプリケーションの OSGi によるモジュール化」の記事で生成した、次の5つの Bundle をインストールしていきましょう。
servicebased.host-1.0.0.jar
servicebased.circle-1.0.0.jar
servicebased.square-1.0.0.jar
servicebased.trapezoid-1.0.0.jar
servicebased.triangle-1.0.0.jar
● Host(servicebased.host) をインストールする
まず、Host を install コマンドを使ってインストールしましょう3)もし、ローカルリポジトリの設定を変更していて、Karafがそれを見つけることができない場合は、Karafのetc/org.ops4j.pax.url.mvn.cfgファイルに、そのリポジトリの設定を加えてください。。
g! install file:/home/gougi/dev/Felix/sample/servicebased.host-1.0.0.jar
Bundle ID: 5
g!
※ /home/gougi/dev/Felix/sample/ の部分は、みなさんの環境に合わせて変更してください。
インストールできているか、lb コマンドで確認します。
g! lb
START LEVEL 1
ID|State |Level|Name
0|Active | 0|System Bundle (4.6.0)
1|Active | 1|Apache Felix Bundle Repository (2.0.2)
2|Active | 1|Apache Felix Gogo Command (0.14.0)
3|Active | 1|Apache Felix Gogo Runtime (0.12.1)
4|Active | 1|Apache Felix Gogo Shell (0.10.0)
5|Installed | 1|Apache Felix Service-Based Host (1.0.0)
g!
インストールした Host が、”ID 5″ として加わりました。
State が “Installed” となっていますので、start コマンドで処理を開始してみます。
g! start 5
g!
うまく開始すると画面に、 “Service-Based Host”というタイトルのウィンドウが現れます。
では、機能をインストールしましょう。まずは円です。
g! install file:/home/gougi/dev/Felix/sample/servicebased.circle-1.0.0.jar
Bundle ID: 6
g! start 6
g!
うまくいくと、次のような赤い円のアイコンが現れます。
キャンバスをクリックして、円を追加してみます。
残りの機能も全部いれてみましょう。
g! install file:/home/gougi/dev/Felix/sample/servicebased.square-1.0.0.jar
Bundle ID: 7
g! start 7
g! install file:/home/gougi/dev/Felix/sample/servicebased.trapezoid-1.0.0.jar
Bundle ID: 8
g! start 8
g! install file:/home/gougi/dev/Felix/sample/servicebased.triangle-1.0.0.jar
Bundle ID: 9
g! start 9
g!
すべてうまく開始すると、画面は次のようになります。
この記事は、ここまでです。