Я использую ServiceTracker для размещения зарегистрированных сервисов в нашей среде OSGi.
Я получил этот код в методе запуска Bundle Activator:
logger.debug("looking for MyService");
tracker = new ServiceTracker(ctx, MyService.class.getName(), null);
tracker.open();
MyService = ((MyService)tracker.getService());
if (MyService != null)
{
logger.debug("found MyService");
}
Проблема заключается в следующем:
- Если я установлю и запу
сервис можно найти и использовать.
- Если я полностью перезапущу OSGi, MyService не сможет
найден моим пакетом (то есть NULL), хотя это
мой пакет находится в состоянии ACTIVE.
- Если я остановлю / начну свой пакет MyService
можно найти и использовать снова.
Я не думаю, что проблема заключается в пакете, в котором находится MyService, поскольку он явно там и может быть найден снова, если мой пакет будет перезапущен.
Похоже, что мой пакет загружается до того, в котором есть зависимый сервис, поэтому он не может найти его после перезапуска и может найти его после перезапуска своего пакета.
Это указывает на то, что если я перечислю доступные службы, используя
ServiceReference[] ref = tracker.getServiceReferences();
он не находит сервисы после перезапуска OSGi, но находит MyService после того, как я остановил / запустил свой пакет, который его ищет.
Я пытался установить ссылку Require-Bundle на пакет, в котором находится MyService, надеясь, что платформа OSGi распознает зависимость, но это не помогло.
Есть идеи ...?