我的基于Java的项目当前正在OSGi容器中运行,其他项目注册其OSGi服务以供其他人使用。如果我知道某个服务当前已注册,我可以使用' BundleContext'内置方法:
BundleContext
但是,我希望能够查询当时在上下文中注册的所有OSGi服务。我已经查看了{{1}}的可用方法,但找不到符合我需求的方法。我不是希望实际使用注册服务列表来使用服务对象,而只是获取已注册服务的名称;我不相信这会违反OSGi原则。
编辑:我在开发环境中没有使用Eclipse或Equinox。
编辑:如果使用Java无法或不建议访问OSGi服务,我可以通过命令行查看已注册的服务(如果可能的话)。
答案 0 :(得分:1)
根据API docs,您可以调用getAllServiceReferences(null, null)
方法获取所有服务的列表:
<强> getAllServiceReferences 强>
ServiceReference<?>[] getAllServiceReferences(java.lang.String clazz,
java.lang.String filter)
throws InvalidSyntaxException
返回ServiceReference对象的数组。返回的数组 ServiceReference对象包含在其下注册的服务 指定的类并匹配指定的过滤器表达式。
参数:
- clazz - 服务所使用的类名 所有服务均已注册或为null。
- filter - 过滤器表达式或 所有服务均为null。