2012-07-12 38 views
0

OSGi企業規範定義了兩種跟蹤方法:按服務或按捆綁方式。ServiceTracker vs BundleTracker

這兩種方式有什麼區別?在哪種情況下,應該使用一種方式而不是另一種方式?

謝謝

+1

線索是在名稱。它取決於你想跟蹤的內容;-) – 2012-07-12 14:56:20

+0

@NeilBartlett好吧,我明白可以通過捆綁定義多個服務? – 2012-07-12 15:06:02

+3

軟件包發佈零到多個服務。真的,你不應該在這個階段看這些公用事業。您應該專注於使用服務的簡單方法,我推薦使用聲明式服務。我還建議收到一本像「OSGi in Action」這樣的書,而不是試圖通過規範。 – 2012-07-12 15:33:34

回答

4

取決於你願意跟蹤什麼。

的BundleTracker跟蹤包,請參閱:

而且ServiceTracker的跟蹤服務實例,請參見:

所以,很顯然,如果你有興趣在什麼捆包帶發生,您使用BundleTracker。如果你對服務實例感興趣,你可以使用ServiceTracker。

0

說得很簡單: 包是罐子。您可以跟蹤它是否已安裝,成功啓動,尚未啓動等。

一個包可以發佈零個或多個服務。 OSGi術語中的服務是活動java對象,它爲您提供了執行某些操作的方法。即使軟件包在那裏,其服務可能已經消失(例如,因爲軟件包已停止;或已安裝但尚未啓動)。即使捆綁包處於ACTIVE狀態,它仍然可能在等待某種條件以提供其服務 - 它完全取決於綁定決定,當它註冊和取消註冊其服務時。

在最典型的情況下,您的代碼可以與服務一起工作 - 例如,你得到LogService並調用它的log()方法。因此,在99%的情況下,您應該對ServiceListener感興趣(或者,更好的方式是使用ServiceTracker,它也是如此,但是會爲您處理一些典型的同步缺陷)。

希望這有助於:)

相關問題