Apache Felix の servicebased サンプルを Apache Felix Gogo で動作させる – デスクトップアプリケーションの OSGi によるモジュール化(2/2)


この記事は、「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”というタイトルのウィンドウが現れます。

service-based-host-empty

では、機能をインストールしましょう。まずは円です。

g! install file:/home/gougi/dev/Felix/sample/servicebased.circle-1.0.0.jar
Bundle ID: 6
g! start 6
g! 

うまくいくと、次のような赤い円のアイコンが現れます。

service-based-host-circle

キャンバスをクリックして、円を追加してみます。

service-based-host-circles

残りの機能も全部いれてみましょう。

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!

すべてうまく開始すると、画面は次のようになります。

service-based-host-all

この記事は、ここまでです。

Footnotes   [ + ]

1. たとえばフェイルオーバーの仕組みを持っています
2. ダウンロードページはこちら
3. もし、ローカルリポジトリの設定を変更していて、Karafがそれを見つけることができない場合は、Karafのetc/org.ops4j.pax.url.mvn.cfgファイルに、そのリポジトリの設定を加えてください。