2

2 つのバンドルがあり、どちらも同じサードパーティ ライブラリの異なるバージョンが組み込まれており、異なる構成で使用する必要があります。残念ながら、ライブラリはシステム プロパティでしか構成できません。

Activatorそのため、次のクラスを実行しようとします。

  1. 必要なシステム プロパティの設定
  2. ライブラリの初期化、
  3. 以前のシステム プロパティの設定を解除します。

OSGi フレームワークが 2 つのバンドルを同時に開始すると機能しません。OSGi フレームワークの実装で許可されていますか? このソリューションは安全ですか? 同じシステム プロパティをバンドルごとに異なる値に設定する他の方法はありますか?

(可能であれば、これらのバンドルに異なる開始レベルを設定することは避けたいと考えています。)

4

4 に答える 4

3

OSGiフレームワークの実装では、指定された開始レベル内でバンドルを同時に開始できます。したがって、バンドルをさまざまな開始レベルに配置して、一方が他方の前に開始されるようにすることができます。

于 2012-05-17T20:10:00.217 に答える
1

Felix と Equinox では、バンドルのインストール/解決/開始/停止/アンインストール アクションはすべて単一のスレッドで発生します。アクティベーターが同じスレッドで実行されているかどうかははっきりとは思い出せませんが、実行していると思います。

于 2012-05-20T01:07:45.643 に答える
1

ライブラリの初期化をラップする OSGi サービスを作成するのはどうですか。したがって、一度だけ実行する必要があります。または、サービスは初期化を同期することができるため、同時に発生しないようにしてください。

于 2012-05-21T10:09:55.437 に答える
0

それらを別々のバンドルに入れることは強い要件ですか? ライブラリをどうしますか? Java パッケージとしてエクスポートしますか、それともライブラリからサービスを作成しますか? 両方のライブラリを 1 つの同じバンドルに入れることができれば、どちらが最初に初期化され、どちらが 2 番目に初期化されるかを完全に制御できます。

ところで、Export-Package を使用してバンドル マニフェストでそれらをエクスポートする場合、エクスポートされたパッケージは、バンドルが RESOLVED 状態 (つまり、インストールされているがまだ開始されていない) の場合でも、他のバンドルで使用できることに注意してください。そのため、Bundle Activator が作成されて初期化が行われる前であっても、誰かが lib のメソッドを呼び出す可能性があります....

于 2012-05-25T10:45:44.093 に答える