如何获取所有当前注册的OSGi服务的列表?

时间:2017-07-18 20:12:52

标签: java osgi osgi-bundle

我的基于Java的项目当前正在OSGi容器中运行,其他项目注册其OSGi服务以供其他人使用。如果我知道某个服务当前已注册,我可以使用' BundleContext'内置方法:

BundleContext

但是,我希望能够查询当时在上下文中注册的所有OSGi服务。我已经查看了{{1}}的可用方法,但找不到符合我需求的方法。我不是希望实际使用注册服务列表来使用服务对象,而只是获取已注册服务的名称;我不相信这会违反OSGi原则。

编辑:我在开发环境中没有使用Eclipse或Equinox。

编辑:如果使用Java无法或不建议访问OSGi服务,我可以通过命令行查看已注册的服务(如果可能的话)。

1 个答案:

答案 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。
  •