目的
私は現在、既存の Java アプリケーションをプラグインベースのシステムに変換することによって適応させています。これは、さまざまなサービスを提供する Spring MVC ベースの Web サービスです。OSGi バンドルによって提供されるこれらのサービスをプラグ可能にするつもりです。で作成された、これらのサービスを提供するすべての OSGi バンドルが既にありますmaven-bundle-plugin
。
私がやった事
OSGi R4 API を使用して、OSGI フレームワーク (Apache Felix) をアプリケーションに組み込むことにしました。これを Maven の依存関係として追加します。
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.framework</artifactId>
<version>4.2.1</version>
</dependency>
それを初期化する:
FrameworkFactory frameworkFactory = ServiceLoader
.load(FrameworkFactory.class).iterator().next();
Map<String, String> config = new HashMap<String, String>();
config.put(FelixConstants.LOG_LEVEL_PROP, Integer.toString(Logger.LOG_DEBUG));
this.framework = frameworkFactory.newFramework(config);
this.framework.init();
this.context = framework.getBundleContext(); // keep ref to context
コンテキストを介してすべてのバンドルをインストールします。
context.installBundle(jarPath)
そしてフレームワークを開始します:
framework.start();
次に、すべてのバンドルの状態を確認し、フレームワークを除くすべてに状態がありINSTALLED
ます。フレームワーク バンドルはACTIVE
.
明らかに、インストールされたバンドルは解決されていません。
質問
Felix がバンドルの解決を試みるのはいつですか? OSGi のライフサイクルから理解したところ、解決は自動的に行われます。しかし、Felix がバンドルを解決しようとしているかどうかはわかりません。ログ レベルを DEBUG に設定しても、ログは出力されません。特定のバンドルが解決できない理由がわかれば、セットアップをデバッグするのは簡単です (つまり、Felix はどのパッケージが見つからないか教えてくれますか?)。