Декларативные сервисы OSGi не связывают сервисы при ручной установке пакетов - PullRequest
0 голосов
/ 14 марта 2019

Чего я пытаюсь достичь

Использование модульной системы netbeans для подготовки приложения для нас, так как мы реализуем модули в OSGi, используя декларативные сервисы через apache felix. Вот настройка модуля:

  • Модуль A - Обеспечивает обслуживание A и B
  • Модуль B - Предоставляет услуги C, Справочные службы A и B
  • Модуль C - Обеспечивает обслуживание D, управляет установкой модулей A и B
  • Модуль D - Справочная служба D и B.

Модуль C устанавливает модули с помощью следующего кода:

BundleContext context = FrameworkUtil.getBundle(class).getBundleContext();
Bundle tcp = context.installBundle("file:Location");
tcp.start();

Где все устанавливается и запускается без ошибок. Однако заявленные ссылки не связаны с услугами.

Для получения более подробной информации о том, как все держится вместе, я добавил код в github https://github.com/jonaslagoni/server. Не забудьте изменить строки в файле: модуль C, dk.sdu.ace.dp.Controller, строка 27-28 для расположение модулей B и A.

  • Модуль A - это «TCP-сервер OSGi Bundle»
  • Модуль B - «Игровой мир OSGi Bundle»
  • Модуль C - это «Зависимый контроллер OSGi Bundle»
  • Модуль D - это «Пакет OSGi Server Engine».

То, что я пробовал до сих пор

  1. На основании активной проблемы Я попытался обеспечить порядок сборки установки, чтобы модуль A устанавливался до модуля B и даже наоборот, просто чтобы быть уверенным. Я даже попытался установить пакет после того, как второй пакет достиг состояния "запущено".
  2. Вызов обновления модуля B после запуска модуля A.
  3. Посмотрел, нужно ли мне что-то делать для регистрации и предоставления различных услуг вручную при установке пакетов, я ничего не смог найти или просто не понял ответов ..
  4. Я пробовал так много глупостей, которые, вероятно, не имеет смысла пытаться описать здесь.

Дополнительные вопросы

Должны ли декларативные службы автоматически связывать провайдеров со ссылками при их установке и запуске через bundlecontext?

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

1 Ответ

1 голос
/ 14 марта 2019

В ссылках DS указано необязательное количество элементов, но не используется greedy опция политики .(Параметр политики reluctant является параметром по умолчанию для исторической обратной совместимости.)

При reluctant ссылка не будет восстановлена, если впоследствии будут зарегистрированы дополнительные / улучшенные службы, такие как пакет, предоставляющий службу, начинающуюся послепакет, потребляющий услугу.При greedy ссылка будет восстановлена.

...