List 有没有办法在OSGi应用程序中查看已注册的服务?

List 有没有办法在OSGi应用程序中查看已注册的服务?,list,service,osgi,List,Service,Osgi,我有一个运行Equinox的OSGi应用程序。我想看看应用程序提供的服务。如何做到这一点?这取决于您的意思是使用OSGi shell进行交互,还是通过应用程序进行编程 以交互方式 您可以使用。见“服务”。要仅查看已部署的服务,需要使用LDAP筛选器。下面是一个例子: (objectClass=my.package.name.*) 另请参阅@Neil Bartlett的答案,该答案可能更简单,因为您可以通过bundle id进行约束(假设您知道它,但这很容易找到) 以编程方式 使用Service

我有一个运行Equinox的OSGi应用程序。我想看看应用程序提供的服务。如何做到这一点?

这取决于您的意思是使用OSGi shell进行交互,还是通过应用程序进行编程

以交互方式

您可以使用。见“服务”。要仅查看已部署的服务,需要使用LDAP筛选器。下面是一个例子:

(objectClass=my.package.name.*)
另请参阅@Neil Bartlett的答案,该答案可能更简单,因为您可以通过bundle id进行约束(假设您知道它,但这很容易找到)

以编程方式


使用ServiceTracker方法,所以一定要给他你的投票:)

来自gogo shell类型:

inspect cap service
这将显示所有捆绑包注册的所有服务。如果要显示特定捆绑包的服务,请键入:

inspect cap service <id>
检查cap服务

其中,
是您感兴趣的捆绑包的数字捆绑包ID。

到目前为止,我的意思是,查看您的服务和更多详细信息的最佳方式是使用然后安装。您可能需要阅读有关此捆绑包的我的和。

如果您希望只启动已注册但尚未启动的特定服务,并希望动态启动它,您可以使用以下方法获取捆绑包:

Bundle bundle = Platform.getBundle("com.example.com.class");
//然后开始打包

bundle.start();
//检查服务引用

ServiceReference<IExampleService> serviceReference = b.getBundleContext().getServiceReference(IExampleService.class);
ServiceReference ServiceReference=b.getBundleContext().getServiceReference(IExampleService.class);

根据[API docs][1],您可以调用
getContext().getAllServiceReferences(clazz,filter)
方法来获取在指定类下注册的所有服务的列表,并与指定的筛选器表达式相匹配。在两个参数上传递
null
将获得所有服务。

它似乎显示eclipse osgi服务正在运行。我希望看到我部署的osgi应用程序中的服务。有没有办法做到这一点?同样,你需要使用一个过滤器来减少它们。此外,在某些控制台(我不确定Equinox控制台)中,您可以按源代码包进行筛选。。。Neil的第二个代码示例就是一个例子。