2012-08-07 90 views

回答

10

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

交互

可以使用Equinox console。请参阅“服务”。要仅查看已部署的服务,您需要使用LDAP过滤器。这里有一个例子:

(objectClass=my.package.name.*) 

另见@Neil巴特利特的答案,可能会更容易,你可以仅仅通过约束捆绑ID(假设你知道它,但是这是很容易找到)。

编程方式

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

+0

它似乎显示日食osgi服务正在运行。我想看看我已部署的osgi应用程序提供的服务。有没有办法做到这一点? – user840930 2012-08-07 15:33:17

+0

同样,你需要使用一个过滤器来减少它们。另外,在一些控制台(我不确定Equinox控制台)中,您可以通过源代码包进行过滤... Neil的第二个代码示例就是一个示例。 – 2012-10-17 08:51:12

11

从GOGO外壳类型:

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文档] [1],您可以调用getContext().getAllServiceReferences(clazz, filter)方法来获取在指定的类下注册并匹配指定的过滤器表达式的所有服务的列表。在两个参数上传递null将获得所有服务。

相关问题