У меня проблема с версией Karaf 2.2.8 (и, скорее всего, с более ранними версиями тоже).
Я собираюсь использовать Karaf для размещения системы с динамически развертываемыми пакетами. Пакеты развертываются пользователями, и я не могу заранее знать, какие они.
Я ожидаю, что порядок BundleActivator.start() будет точно соответствовать зависимостям пакета между пакетами (зависимости пакетов импорта/экспорта) и планирую ожидать, что будет безопасно предположить, что пакет 0 будет полностью инициализирован до того, как пакет 1 будет запущен. . Но это не так - кажется, что 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
Прикрепляю пример проекта для тестов. Тестовый пример: после «mvn install» просто переместите 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