Нет ничего плохого в использовании ServiceTrackers, кроме того факта, что это довольно низкоуровневый способ отслеживания сервисов.Хотя я согласен с тем, что декларативные сервисы являются хорошим механизмом, простое увольнение ServiceTrackers из-за «всевозможных проблем» звучит как плохой совет.
Вернуться к вопросу.
Как только сервис-трекерсоздается и открывается, он дает вам доступ ко всем службам, которые соответствуют условиям фильтра, которые вы указали при создании.Там нет задержки там.Единственное, о чем я могу думать, это то, что ваши пакеты каким-то образом не разрешены правильно, поэтому сервисы, которые зарегистрированы из пакета A, просто не видны для пакета B с помощью ServiceTracker.Чтобы проверить это, сначала найдите пакет, который экспортирует пакет, содержащий интерфейс службы, а затем убедитесь, что к нему действительно подключены A и B.
Немного объясняя механизм обновления / обновления в OSGiподробнее:
Всякий раз, когда вы обновляете что-то в OSGi, это двухэтапный процесс.
Предположим, вы обновляете пакет, содержащий новую версию экспортируемого пакета.Давайте также предположим, что есть какой-то потребитель, который его импортирует.До тех пор, пока вы только обновляете пакет, но не обновляете явно проводку (из которой импортируются ссылки, а какой экспортируется), потребитель будет по-прежнему подключен к старой версии пакета.Как только вы выполните обновление пакета (то, что вы можете сделать в OSGi через службу PackageAdmin), ваш потребитель снова будет разрешен и подключен к новой версии.
Причина, по которой это не связано, заключается в том, что вы можетеВы хотите обновлять несколько пакетов, а не «обновлять» после каждого, а вместо этого откладывать такое обновление до тех пор, пока все они не будут обновлены.
Вполне возможно, что это тот эффект, который вы видите.Первоначально вы только делаете обновление, и только после обновления трекер действительно увидит новую версию сервиса.