Pax Constructを使って、Web Consoleを立ち上げてみる(その2)
HTTP Serviceが立ち上がった事を確認した後は、Web Consoleを入れてみましょう。下記の二つのBundleを、pax-import-bundleを使って追加してみてくだし。
<dependency> <groupId>org.apache.felix</groupId> <artifactId>org.osgi.compendium</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.webconsole</artifactId> <version>2.0.4</version> </dependency>
その1で後からコマンドでシステムプロパティを設定してましたが、もちろんpom.xmlに書いた方がいいので、追加しましょう。provision/pom.xmlとかではなく、直下のpom.xml、すなわち./pom.xmlを開いてシステムプロパティを追加します。
<properties> <!-- | some example OSGi runtime properties --> <org.apache.felix.http.jettyEnabled>true</org.apache.felix.http.jettyEnabled> <!-- 追加しました --> <org.osgi.service.http.port>8080</org.osgi.service.http.port> <org.osgi.service.http.port.secure>8443</org.osgi.service.http.port.secure> </properties>
その後、再度起動してみましょう。うまくいくとhttp://localhost:8080/system/consoleにアクセスするとwebconsoleが開くはずです。
インタフェースのみを提供するBundleの意味
ここで追加したorg.osgi.compendiumですが、サービスに関してはインタフェースのみ提供しています。試しにConfigurationタブを開いてみてください。今は下記のようなページが開かれるはずです。
続いて、ConfigAdminの実装を提供するBundle:org.apache.felix.configadminをstopしてみましょう。
- felixを使ってる場合はpsコマンドを実行し、"Apache Felix Configuration Admin Service"とかかれているBundleのIDを調べ、stop [id]コマンドを実行
- equinoxを使っている場合はssコマンドを実行し、"org.apache.felix.configadmin"と書かれたBundleのIDを調べ、stop [id]コマンドを実行
そして、再度http://localhost:8080/system/console/configMgrを開くとこんな感じで "Configuration Admin Service not available"と表示されます。
これは、Bundleがインストールされていない状態でも同じです。org.osgi.compediumがserviceのインタフェースを提供しているため、なんとか動いているのです。
それじゃFelix Web Consoleを最小構成はどんなの?
なるほど。org.osgi.compediumがインタフェースを提供しているのであれば、最小構成があるはず!と思って調べてみたら、下記の4つがあればとりあえず動くことがわかりました。
- org.apache.felix.http.bundle
- org.osgi.compendium
- org.apache.felix.webconsole
- org.apache.felix.configadmin
org.apache.felix.configadminが必要なのは、org.apache.felix.http.bundleの起動時に参照されるサービスだからです。
次回は実際にサービスはどうやってつくっていくのか、Declartive Serviceを使った連携を見ていきます。*1
*1:ServiceTrackerやServiceListener方式はもう古いんですって