3

目的

私は現在、既存の 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 はどのパッケージが見つからないか教えてくれますか?)。

4

2 に答える 2

2

どのバンドルも開始していないため、Felix の動作は正しいです。それらを開始しない場合は、解決する必要がないため、INSTALLED状態のままになります。

アプリケーションが実際に何かを行うためには、バンドルを開始する必要があります。これは、すべてのバンドルをインストールした後で行う必要があります。つまり、バンドルを開始する前に、すべてのバンドルをインストールする必要があります。Bundleこれを行う最も簡単な方法は、によって返されたオブジェクトをリストに蓄積し、installBundle()を呼び出してこのリストに対して 2 番目のループを実行することBundle.start()です。

于 2013-10-31T21:36:57.320 に答える
0

まず気になるのはスタートレベル。あなたのバンドルの開始レベルが何であるかは、ここにあるものからはわかりませんが、それはあなたが調べるべきものかもしれません.

あなたの質問に関しては、OSGI 仕様 (バージョン 4.3、それは私が今手元にあるものです) のセクション4.4.2 Bundle Stateで説明されています。バンドルが (開始レベルまたは手動で) 開始されていない場合、バンドルはインストール済みの状態になります。

Felix gogo シェルをインストールし、バンドルの開始レベルを検査し、すべての要件が満たされているかどうかを確認すると役立つ場合があります。それが役立つことを願っています。

編集:私が間違っていたことが判明し、次の行を削除しました:「Felix はインストール時にバンドルを自動的に解決しようとしますが、今のところこれをバックアップするものは何もありません。」

于 2013-10-31T21:20:49.360 に答える