2010-10-27 66 views
10

我最近偶然發現了這樣一個事實,即OSGi中的Declarative Services可以將組件的配置設置爲required,以便組件在激活時接收它,消除組件激活和配置之間的差距。我也意識到,您可以通過modified-方法接收配置更新。OSGi聲明性服務與ManagedService配置服務?

在我看來,這個功能與實現ManagedService接口提供的功能非常相似,並且將其作爲您提供的「服務」之一發布。

看來我可以完全忽略ManagedService &只是使用DS配置注入。

這些技術之一是否比其他技術更受歡迎?還是我還沒有看到其他的折衷?

回答

11

是的,您可以完全忽略ManagedServiceManagedServiceFactory,只使用聲明性服務組件。是的,我會推薦這種方法。

只是想到這是不同的抽象層次。 MS/MSF是config admin的低級API,即使沒有運行DS軟件包,它也可用。這樣做的好處是你可以編寫可配置的服務,而不依賴於DS,這對於某些「系統級」組件來說可能是需要的。

但是,如果您很樂意依靠DS,例如對於「應用程序級」組件,那麼使用DS與config admin的內置集成將使您的生活變得更加輕鬆。

1)通過config admin

+0

好吧,這就是我傾向於做的事情,但我注意到/有點擔心DS組件無法創建,因爲它的配置無效並引發異常,因爲Equinox一直嘗試實例化它。的異常被拋出和記錄。它看起來並不乾淨。 – oconnor0 2010-11-09 05:11:46

+1

如果它的activate方法拋出異常,Equinox不應該繼續嘗試實例化組件。如果配置更改,它應該再次嘗試重新創建組件。至於日誌記錄 - 當然,應該記錄組件引發的異常! – 2010-11-09 08:17:11

+0

什麼是正確的方式來哄DS處理組件作爲'ManagedServiceFactory',而不是'ManagedService'?換句話說,如果有人希望DS爲每個*適用的配置實例創建一個組件的新實例,那有什麼訣竅?是否需要編寫一個Metatype定義? – seh 2011-07-31 15:13:15