Ich habe ein Problem mit der Version 2.2.8 von Karaf (und höchstwahrscheinlich auch mit den früheren Versionen).
Ich werde Karaf verwenden, um das System mit dynamisch bereitgestellten Paketen zu hosten. Bundles werden von Benutzern bereitgestellt und ich kann nicht im Voraus wissen, welche sie sind.
Ich erwarte, dass die Reihenfolge von BundleActivator.start() genau den Paketabhängigkeiten zwischen den Bundles entspricht (Abhängigkeiten von Import-/Exportpaketen) und dass man davon ausgehen kann, dass Bundle0 vollständig initialisiert wird, bevor Bundle1 gestartet wird. Dem ist aber nicht so - es scheint, dass BundleActivator.start() in einer "zufälligen" Reihenfolge aufgerufen wird und Paketabhängigkeiten zwischen Bundles außer Acht lässt.
Beispiel für einen Anwendungsfall, ich habe 3 Libs
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
Wenn Karaf gestartet wird, sehe ich in der Konsole folgende Beispielausgabe
karaf@root> TestLib1Activator.start()
TestLib2Activator.start()
ITestRoot: interface com.testorg.testlib0.ITestRoot - 16634462
TestRoot: class com.testorg.testlib1.TestRoot - 21576551
TestLib0Activator.start()
aber ich erwarte, dass es immer in dieser Reihenfolge sein sollte
TestLib0Activator.start()
TestLib1Activator.start()
TestLib2Activator.start()
ITestRoot: interface com.testorg.testlib0.ITestRoot - 16634462
TestRoot: class com.testorg.testlib1.TestRoot - 21576551
Ich füge ein Beispielprojekt für Tests bei. Testfall: nach "mvn install" einfach jars aus dem Ordner ./deploy in den gleichen Ordner von Karaf verschieben, Trace-Meldungen sollten in der Konsole erscheinen. (Hinweis: Es kann sein, dass es beim ersten Versuch richtig funktioniert, versuchen Sie es dann noch einmal :))
Beispielhaftes Testprojekt http://karaf.922171.n3.nabble.com/file/n4025256/KarafTest.zip
Hinweis: Dies ist ein Cross-Post von http://karaf.922171.n3.nabble.com/What-is-the-natural-start-order-for-dependent-bundle-td4025256.html