2010-02-04 34 views
2

OSGi ConfigAdmin將Dictionary實例傳遞到ManagedService.updated();該服務將被期望從字典中提取新的值。這很好,並且工作正常,但我迄今爲止無法在任何地方找到解釋的一件事是,字典值類型是否應該是特定的(Integer,Long,Float,Boolean)或託管服務隨後解析的通用字符串/自身轉換成合適的形式,而不是期望正確的值類型。OSGi ConfigAdmin不清楚更新的值類型字典

這種差異似乎無害,但對子系統/層耦合具有相當嚴重的後果,因爲字典和ManagedService的創建者顯然必須就值類型達成一致。

我到目前爲止還沒有找到任何建議;規範和幾乎所有現有的示例都完全忽略了這個問題,並使用了特定類型或無類型的字符串。

我錯過了什麼,或者這是真的低估?

回答

6

有兩個答案。首先,看看MetaType服務,它允許你配置的bundle聲明他們接受的所有字段和類型。

但是,恕我直言,最好能讓您的ManagedService(工廠)實施在面對各種數據格式時健壯。特別是,確保它們始終能夠處理字符串作爲最後的手段,即使其他數據類型是首選。這是因爲一些管理代理或者忽略了MetaType服務,或者他們不能以除Strings之外的任何類型提供數據。 Felix FileInstall就是一個很好的例子:它只讀取一個屬性文件,因此將所有對象視爲一個String。

對您發送的內容要嚴格,但對您收到的內容慷慨。

+1

MetaType服務正是缺失的難題。謝謝! – 2010-02-04 16:24:19