2016-12-06 5 views
2

Я должен программно обеспечить определенный порядок запуска нескольких пакетов OSGi, потому что процедура активации имеет некоторые зависимости к другим пакетам. Я управляю жизненным циклом пакета из кода Java, где я пытаюсь определить проводку пучка, чтобы рассчитать правильный порядок начала. Все пучки установлены правильно.Исправить пакет OSGi из кода

Поскольку пулы для проводки связки должны быть инициализированы в разрешенном состоянии, я ищу способ программного решения пакета. Я только нашел bundle.start(), который разрешает, но также запускает пучок. Есть ли способ разрешить без старта? Если я использую оболочку OSGi вручную, я могу достичь этого на resolve <bundle-id>.

+0

Не можете ли вы использовать такой подход, как регистрация какого-либо фиктивного сервиса и использование их для разрешения заказа? –

ответ

1

Вы можете решить набор пучков с помощью FrameworkWiring.resolveBundles. Но решение пакета является необходимым предварительным условием для запуска пакета, но не имеет никакого отношения к упорядочению. Вы можете сразу разрешить все пакеты, а затем запустить пучки в случайном порядке.

Как говорит Питер, если вам нужно запустить пучки в определенном порядке, что-то не так с вашей системой. Как он будет обрабатывать пакет?

+0

Я содрогнулся, чтобы представить, что выглядит «Java-код, где я пытаюсь определить проводку пучка, чтобы рассчитать правильный порядок начала». Вы понимаете, что именно это делает OSGi Framework для вас? –

4

Вы не можете сделать это надежным и надежным способом. OSGi не имеет начального порядка. период. вне. преодолевай это.

Причина проста: пучок может быть остановлен, и это бросает любой гениальный заказ, который вы придумали при запуске.

Единственный заказ, который работает, зависит от службы. Каждый компонент должен указать, от каких служб он зависит, а не запускается до того, как будут зарегистрированы необходимые службы. Это ТОЛЬКО надежный способ получить заказ.

Это, конечно, тривиально, когда вы можете использовать DS.

Смежные вопросы