Порядок развертывания пакетов

У меня вопрос о развертывании пакетов OSGI.

У меня есть 7 пакетов, которые мне нужно развернуть в строгом порядке, иначе я не получу ошибку «класс не найден». Часть пакетов используется как статические библиотеки, часть из них экспортирует сервисы OSGI.

В приложениях OSGI, как обычно решается эта проблема?


person Peter Penzov    schedule 08.09.2015    source источник


Ответы (3)


Эта проблема решается, не решая ее (по крайней мере, не так, как вы просили).

То есть: у вас нет пакетов, которые должны устанавливаться / запускаться в строгом порядке! Это означает, что ваши пакеты очень плохо спроектированы. Вместо этого измените свои пакеты, чтобы они могли запускаться в любом порядке.

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

person Neil Bartlett    schedule 08.09.2015

Если я правильно понимаю вашу проблему, это просто вопрос предоставления правильной цепочки зависимостей, которая будет разрешена OSGi.
Ваши библиотеки должны экспортировать пакеты, которые будут импортировать ваши службы.

Если для BundleA требуются классы из BundleB и OtherBundle, добавьте Import-Package и Export-Package метаданных в MANIFEST.MF всех пакетов должно быть достаточно.

BundleA MANIFEST.MF

Импорт-пакет: my.required.package.from.b, other.package.in.b, other.package

BundleB MANIFEST.MF

Пакет экспорта: my.required.package.from.b, other.package.in.b

OtherBundle MANIFEST.MF

Экспортный пакет: other.package

Затем установите все пакеты, они будут в состоянии INSTALLED. Запустите основной (в данном примере BundleA). OSGi разрешит все зависимости (только будьте осторожны, чтобы не было циклов), и пакеты перейдут в состояние RESOLVED (зависимости доступны), а затем ACTIVE.

Вам не нужно вручную добавлять эти зависимости, такие инструменты, как maven-bundle-plugin можно легко настроить.

Также может быть полезен этот вопрос Каков естественный порядок запуска пакетов OSGI, зависящих от пакета.

person Alessandro Da Rugna    schedule 03.02.2016

Я согласен с тем, что лучший подход, как упомянул Нил Бартлетт, - избегать этого. Однако иногда требуется заказ запуска пакетов. Даже используя Equinox или Felix, вы можете получить его с помощью начального уровня пакета. Это обеспечит запуск ваших пакетов в определенном порядке.

"Начальный уровень связан с каждым пакетом. Начальный уровень - это положительное целое число, которое определяет порядок, в котором пакеты активируются / запускаются. Пакеты с низким начальным уровнем запускаются перед пакетами с высоким начальным уровнем. Следовательно, пакеты с уровень запуска, 1, запускается первым, а пакеты, принадлежащие ядру, обычно имеют более низкие уровни запуска, поскольку они обеспечивают предварительные условия для запуска большинства других пакетов ". - Документация Red Hat JBoss Fuse / а>

Надеюсь, это поможет.

person Flávio Ferreira    schedule 12.09.2015
comment
Использование начальных уровней не избавляет вас от проблем. Порядок запуска на начальном уровне не определен, и вы не можете разорвать циклы. - person Tim Ward; 13.09.2015