У меня есть приложение OSGi под управлением Equinox. Я хотел бы видеть услуги, которые предоставляются приложением. Как я могу это сделать?
Есть ли способ просмотра зарегистрированных услуг в приложении OSGi?
Ответ 1
Это зависит от того, означает ли вы интерактивно, используя оболочку OSGi или программно из вашего приложения.
Интерактивное
Вы можете использовать консоль Equinox . См. "Услуги". Чтобы видеть только службы, которые вы развернули, вам необходимо использовать фильтр LDAP. Вот пример:
(objectClass=my.package.name.*)
Также см. ответ @Neil Bartlett, который может быть проще, поскольку вы можете просто ограничить идентификатором пакета (предполагая, что вы это знаете, но это легко найти).
Programatically
Используйте подход ServiceTracker. Нейл также написал все об этом, поэтому обязательно дайте ему свои upvotes:)
Ответ 2
Из типа оболочки gogo:
inspect cap service
Это покажет все службы, зарегистрированные всеми связями. Если вы хотите показать службы для определенного пакета, введите:
inspect cap service <id>
Где <id>
- числовой идентификатор пакета интересующего вас пакета.
Ответ 3
До сих пор я имею в виду, что лучший способ видеть ваши услуги и тысячи подробностей - использовать Apache Felix Webconsole, а затем установите XRay. Возможно, вы захотите прочитать первый и второй блог об этом комплекте.
Ответ 4
Если вы хотите просто запустить определенную службу, которая уже зарегистрирована, но не запущена и хотите запустить ее динамически, вы можете получить пакет, используя:
Bundle bundle = Platform.getBundle("com.example.com.class");
//Затем запустите пакет
bundle.start();
//Проверьте ссылки на службы
ServiceReference<IExampleService> serviceReference = b.getBundleContext().getServiceReference(IExampleService.class);
Ответ 5
В соответствии с [API docs] [1] вы можете вызвать метод getContext().getAllServiceReferences(clazz, filter)
, чтобы получить список всех служб, зарегистрированных в указанном классе, и соответствовать указанному выражению фильтра. Передача null
по обоим параметрам получит все сервисы.