OSGi ライブラリに実際に依存することなく、OSGi バンドルとして公開したいいくつかのモジュールを構築しています。これは、宣言型サービス オプションを使用して可能であるように思われます。
ただし、私は OSGi にかなり慣れていないため (少なくともバンドル作成側では)、すべてが正常に機能するかどうかをテストしたいと考えています。この目的のために、小さな組み込み OSGi 環境をセットアップしたいと考えています。
現在、API をエクスポートし、単一のインターフェイスのスタブ実装も提供する単一のバンドルがあります。
次のチュートリアルに従って、環境をセットアップしました。
- http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html
- コードから Apache Felix を起動して使用する方法は?
組み込みの felix 実装は適切に動作しているように見えますが、2 つの問題があります。
Bundle bundle = felix.getBundleContext().installBundle("/path/to/bundle.jar")
bundle.start();
System.out.println(bundle.getRegisteredServices());
これnull
は、バンドルが正常に開始されたように見えても、サービスを公開していないように見えるため、出力されます。
第二に、宣言型サービスを少しずつ稼働させるために何か特別なことをしなければならないかどうか疑問に思っています。私のMavenの依存関係は次のとおりです。
<dependencies>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.framework</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
ここにある電子メール スレッドに基づく: http://mail-archives.apache.org/mod_mbox/felix-users/201111.mbox/%3CAE48C9B8172EFC48A028B60E8D6F96660143A5F336@sausexmbp02.amd.com%3E
バンドルを felix スタートアップ プロパティに追加しようとしました。
map.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "org.apache.felix.scr; version=1.6.2");
しかし、これは一見すると少し楽観的に見えます。組み込みの Felix エンジンの宣言型サービスを有効にするにはどうすればよいですか?