Как установить и запустить пакеты osgi одновременно, причем один из них зависит от другого

У меня есть два пакета, скажем, A и B. A зависит от B (указанного как Required-Bundle: B в MANIFEST A).

Теперь я установил оба пакета A, B один за другим (вызвав BundleContext.installBundle). Затем, когда я пытаюсь запустить пакет A, я получаю следующую ошибку

org.osgi.framework.BundleException: Could not resolve module: A [140]
  Unresolved requirement: Require-Bundle: B; bundle-version="1.0.0"

Из исключения я понимаю, что пакет B еще не запущен (разрешен). Как теперь решить эту проблему?

Единственный способ решить эту проблему - сортировать пакеты по их зависимостям? Или есть ли какие-либо варианты, такие как указание папки для среды выполнения OSGi, чтобы любые файлы пакетов, скопированные в нее, были активированы?

Кстати, я использую Эквинокс.


person pgollangi    schedule 19.01.2016    source источник
comment
Похоже, что Bundle B еще не установлен, когда вы запускаете Bundle A? Фреймворк автоматически попытается разрешить B, когда он будет установлен, вам не нужно запускать его.   -  person Peter Kriens    schedule 19.01.2016


Ответы (1)


Убедитесь, что вы установили ВСЕ пакеты, прежде чем запускать ЛЮБОЙ из них. т.е. вам нужно сделать это:

  1. Установить А, установить Б
  2. Старт А, Старт Б.

а НЕ это:

  1. Установить А, Запустить А
  2. Установить Б, Запустить Б

Во втором (неправильном) сценарии вы получите ошибку разрешения, потому что A зависит от B, а B еще не существует с точки зрения OSGi.

В первом (правильном) сценарии, когда вы запускаете A, OSGi поймет, что ему нужно разрешить как A, так и B, чтобы удовлетворить зависимости.

[Кстати, в своем вопросе вы, кажется, путаете начало с разрешением: вы сказали, что «B еще не начато (решено)». Это совершенно разные вещи. B нужно установить только перед запуском A, и OSGi автоматически разрешит его, когда это необходимо.]

person Neil Bartlett    schedule 19.01.2016
comment
@AdamArold Нет проблем! - person Neil Bartlett; 19.01.2016
comment
Спасибо @NeilBartlett - person pgollangi; 20.01.2016