我有一个运行Equinox的OSGi应用程序。我想看看应用程序提供的服务。我怎样才能做到这一点?
这取决于您是指交互式,使用OSGi shell还是以编程方式从您的应用程序。
交互式
你可以使用Equinox console。见'服务'。要仅查看已部署的服务,您需要使用LDAP过滤器。这是一个例子:
(objectClass=my.package.name.*)
另请参阅@Neil Bartlett的答案,这可能更容易,因为您可以通过捆绑ID进行约束(假设您知道它,但这很容易找到)。
编程
使用ServiceTracker方法。 Neil also wrote all about this,所以一定要给他你的upvotes :)
来自gogo shell类型:
inspect cap service
这将显示所有捆绑包注册的所有服务。如果要显示特定包的服务,请键入:
inspect cap service <id>
其中<id>
是您感兴趣的包的数字包ID。
到目前为止,我的意思是到目前为止,查看您的服务和更多细节的最佳方式是使用Apache Felix Webconsole然后安装XRay。您可能想要阅读关于此捆绑的first和second blog。
如果您只想启动已注册但尚未启动并希望动态启动的特定服务,您可以使用以下命令获取该服务:
Bundle bundle = Platform.getBundle("com.example.com.class");
//然后开始捆绑
bundle.start();
//检查服务引用
ServiceReference<IExampleService> serviceReference = b.getBundleContext().getServiceReference(IExampleService.class);
根据[API docs] [1],您可以调用getContext().getAllServiceReferences(clazz, filter)
方法来获取在指定类下注册的所有服务的列表,并匹配指定的过滤器表达式。在两个参数上传递null
将获得所有服务。