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

问题描述 投票:13回答:5

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

list service osgi
5个回答
13
投票

这取决于您是指交互式,使用OSGi shell还是以编程方式从您的应用程序。

交互式

你可以使用Equinox console。见'服务'。要仅查看已部署的服务,您需要使用LDAP过滤器。这是一个例子:

(objectClass=my.package.name.*)

另请参阅@Neil Bartlett的答案,这可能更容易,因为您可以通过捆绑ID进行约束(假设您知道它,但这很容易找到)。

编程

使用ServiceTracker方法。 Neil also wrote all about this,所以一定要给他你的upvotes :)


14
投票

来自gogo shell类型:

inspect cap service

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

inspect cap service <id>

其中<id>是您感兴趣的包的数字包ID。


1
投票

到目前为止,我的意思是到目前为止,查看您的服务和更多细节的最佳方式是使用Apache Felix Webconsole然后安装XRay。您可能想要阅读关于此捆绑的firstsecond blog


0
投票

如果您只想启动已注册但尚未启动并希望动态启动的特定服务,您可以使用以下命令获取该服务:

Bundle bundle = Platform.getBundle("com.example.com.class");

//然后开始捆绑

bundle.start();

//检查服务引用

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.