Karafの2.2.8バージョン(そしておそらく以前のバージョンでも)で問題が発生します。
Karafを使用して、動的にデプロイされたバンドルでシステムをホストします。バンドルはユーザーによって展開され、私はそれらがどれであるかを事前に知ることができません。
BundleActivator.start()の順序は、バンドル間のパッケージの依存関係(インポート/エクスポートパッケージの依存関係)に正確に対応し、bundle1が開始される前にbundle0が完全に初期化されると想定しても安全であると期待しています。 。しかし、そうではありません。BundleActivator.start()は「ランダムな」順序で呼び出され、バンドル間のパッケージの依存関係を無視しているようです。
サンプルのユースケース、3つのライブラリがあります
test-lib0 - defines testlib0.ITestRoot, exports testlib0 package
test-lib1 - defines testlib1.TestRoot implements ITestRoot, exports testlib1 package
test-lib2 - uses both libs, ITestRoot and TestRoot
Karafを起動すると、コンソールに次のサンプル出力が表示されます
karaf@root> TestLib1Activator.start()
TestLib2Activator.start()
ITestRoot: interface com.testorg.testlib0.ITestRoot - 16634462
TestRoot: class com.testorg.testlib1.TestRoot - 21576551
TestLib0Activator.start()
しかし、私はそれが常にこの順序でなければならないと思います
TestLib0Activator.start()
TestLib1Activator.start()
TestLib2Activator.start()
ITestRoot: interface com.testorg.testlib0.ITestRoot - 16634462
TestRoot: class com.testorg.testlib1.TestRoot - 21576551
テスト用のサンプルプロジェクトを添付しています。テストケース:「mvninstall」の後、jarを./deployフォルダーからKarafの同じフォルダーに移動すると、コンソールにトレースメッセージが表示されます。(注:最初の試行から正しく機能する可能性があります。もう一度試してください:))
サンプルテストプロジェクト http://karaf.922171.n3.nabble.com/file/n4025256/KarafTest.zip
注:これはhttp://karaf.922171.n3.nabble.com/What-is-the-natural-start-order-for-dependent-bundle-td4025256.htmlからのクロスポストです。