2010-02-04 32 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