各位码农,
我目前正在尝试找到一种简单明了的方法来获取使用给定接口的服务/组件的列表。我正在使用正在运行的 Liferay 7.1.x 服务器的 gogo-shell,但似乎找不到一种简单直接的方法来解决这个问题。
我们想通过 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-service 找到服务的更快方法吗?
[编辑]:我们解决了这个问题,而不必为 WebSsoProfile 服务的所有使用者提供配置覆盖,而是通过在服务器启动时停用默认服务来确保使用我们的实现。您可以看到这里描述的方法。
无论如何,出于调试目的,这种查找将非常有用。因此,如果有人知道检索接口所有使用者列表的方法,请发布您的解决方案!