我有一个运行 Equinox 的 OSGi 应用程序。我想查看应用程序提供的服务。我怎样才能做到这一点?
5 回答
从 gogo shell 类型:
inspect cap service
这将显示所有捆绑包注册的所有服务。如果要显示特定捆绑包的服务,请键入:
inspect cap service <id>
<id>
您感兴趣的捆绑包的数字捆绑包 ID在哪里。
这取决于您的意思是交互方式、使用 OSGi shell 还是以编程方式从您的应用程序中。
交互式
您可以使用Equinox 控制台。见“服务”。要仅查看已部署的服务,您需要使用 LDAP 过滤器。这是一个例子:
(objectClass=my.package.name.*)
另请参阅@Neil Bartlett 的答案,这可能更容易,因为您可以通过捆绑 ID 进行限制(假设您知道,但这很容易找到)。
以编程方式
使用 ServiceTracker 方法。尼尔也写了这一切,所以一定要给他你的支持:)
到目前为止,我的意思是到目前为止,查看您的服务和数千个详细信息的最佳方式是使用Apache Felix Webconsole,然后安装XRay。您可能想阅读我关于此捆绑包的第一篇和第二篇博客。
根据[API docs][1],您可以调用getContext().getAllServiceReferences(clazz, filter)
方法来获取在指定类下注册并匹配指定过滤器表达式的所有服务的列表。传递null
这两个参数将获得所有服务。
如果您只想启动已注册但未启动的特定服务并希望动态启动它,您可以使用以下方式获取捆绑包:
Bundle bundle = Platform.getBundle("com.example.com.class");
//然后启动捆绑
bundle.start();
//检查服务引用
ServiceReference<IExampleService> serviceReference = b.getBundleContext().getServiceReference(IExampleService.class);