Я играю с OSGi и имею несколько пакетов. Bundle A и B содержат зарегистрированный сервис, который реализует один интерфейс. Третий пакет C включает код для поиска службы, реализующей ранее упомянутый интерфейс. У пучков A и B разные номера версий, однако, похоже, что C получает услугу из первого запущенного пакета. Я изменил начальный уровень, чтобы сделать правильную вещь, но версия используется только для принятия, а не для заказа службы.
A version 1.0 start level 1
B version 1.1 start level 2
C requires both bundles, start level 3
В приведенном выше примере C всегда получает услугу от A, хотя B имеет более высокую версию пакета. Однако, если я переключу начальный уровень, так что B начинается до A, C видит службу B.
Я искал веб-сайт OSGi, и нет четкого объяснения того, используется ли управление версиями пакета для приоритизации службы над другой. Мое понимание, похоже, указывает на то, что начальный уровень должен использоваться для упорядочивания пуска, чтобы можно было правильно усвоить зависимости. Однако он, похоже, перегружен, так что он также приоритизирует приоритет службы. Учитывая все вышеизложенное, я предполагаю, что имеет смысл не использовать версию пакета в выборе, потому что номер версии - это просто число относительно ничего.
Каков наилучший способ определить приоритет одной службы над другой, помимо начального уровня?