Товарищи кодеры,
В настоящее время я пытаюсь найти простой и лаконичный способ получить список служб/компонентов, использующих данный интерфейс. Я использую gogo-shell работающего сервера Liferay 7.1.x и не могу найти простой и прямой способ сделать это.
Мы хотим переопределить ссылки на используемый сервис через OSGI-configuration, но сначала нужно найти все компоненты, использующие его. Поскольку существуют статические неохотные ссылки на сервисный компонент, простое предоставление альтернативы с более высоким рейтингом не является жизнеспособным решением.
Вот пакеты, связанные с gogo, которые я использую:
35|Active | 6|Apache Felix Gogo Command (1.0.2)|1.0.2
36|Active | 6|Apache Felix Gogo Runtime (1.1.0.LIFERAY-PATCHED-2)|1.1.0.LIFERAY-PATCHED-2
72|Active | 6|Apache Felix Gogo Shell (1.1.0)|1.1.0
542|Active | 10|Liferay Foundation - Liferay Gogo Shell - Impl (1.0.13)|1.0.13
543|Active | 10|Liferay Gogo Shell Web (2.0.25)|2.0.25
До сих пор я мог перечислить всех провайдеров интерфейса через se (interface=com.liferay.saml.runtime.servlet.profile.WebSsoProfile)
:
{com.liferay.saml.runtime.profile.WebSsoProfile, com.liferay.saml.runtime.servlet.profile.WebSsoProfile}={service.id=6293, service.bundleid=79, service.scope=bundle, component.name=com.liferay.saml.opensaml.integration.internal.servlet.profile.WebSsoProfileImpl, component.id=3963}
"Registered by bundle:" de.haufe.leong.com.liferay.saml.opensaml.integration [79]
"Bundles using service"
com.liferay.saml.web_2.0.11 [82]
com.liferay.saml.impl_2.0.12 [78]
Ознакомьтесь со всеми требованиями к комплектам через: inspect cap service
:
com.liferay.saml.impl_2.0.12 [78] requires:
...
service; com.liferay.saml.runtime.profile.WebSsoProfile, com.liferay.saml.runtime.servlet.profile.WebSsoProfile provided by:
de.haufe.leong.com.liferay.saml.opensaml.integration [79]
...
Но мне пока не удавалось перечислить фактические сервисы внутри этих пакетов, которые используют данный интерфейс (или сервисный компонент).
Единственное решение, которое я вижу до сих пор, — это перечислить все предоставляемые службы этих пакетов через scr:list bid
, а затем проверить каждую службу с помощью scr:info componentId
, чтобы узнать, использует ли она службу WebSsoProfile.
Ребята, вы знаете более быстрый способ найти сервисы с помощью WebSsoProfile-сервиса?
[РЕДАКТИРОВАТЬ]: мы решили проблему, не предоставляя переопределения конфигурации для всех потребителей службы WebSsoProfile, а скорее гарантируя, что наша реализация используется путем деактивации службы по умолчанию при запуске сервера. Вы можете ознакомиться с подходом, описанным здесь.
В любом случае, для целей отладки такой поиск был бы очень полезен. Поэтому, если кто-нибудь знает способ получить список всех потребителей интерфейса, опубликуйте свое решение!