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.configadminが必要なのは、org.apache.felix.http.bundleの起動時に参照されるサービスだからです。
次回は実際にサービスはどうやってつくっていくのか、Declartive Serviceを使った連携を見ていきます。*1

*1:ServiceTrackerやServiceListener方式はもう古いんですって