2012-08-07 89 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將獲得所有服務。

相關問題