OSGi ConfigAdmin将Dictionary实例传递给ManagedService.updated();然后,该服务将从字典中提取新值。这很好,工作正常,但我到目前为止无法解释的一件事是字典值类型是否应该是特定的(整数,长,浮点,布尔)或托管服务然后解析的通用字符串/单独转换为合适的形式,而不是期望正确的值类型。
这种差异似乎无害,但对子系统/层耦合有相当严重的影响,因为字典的创建者和ManagedService显然必须就值类型达成一致。
到目前为止,我没有找到任何关于此的建议;规范和几乎所有现有的例子完全忽略了问题,并使用特定类型或无类型字符串。
我是否遗漏了某些内容,或者这是否真的没有说明?
答案 0 :(得分:6)
这有两个答案。首先,看一下MetaType服务,它允许您配置的包声明它们接受的所有字段和类型。
但恕我直言,最好是在面对各种数据格式时使ManagedService(Factory)实现变得强大。特别是,确保它们始终能够作为最后的手段处理字符串,即使首选其他数据类型。这是因为某些管理代理会忽略MetaType服务,或者他们无法提供除Strings之外的任何类型的数据。 Felix FileInstall就是一个很好的例子:它只是读取一个Properties文件,因此将所有内容都视为String。
严格要求你发送的东西,但要慷慨接受你所得到的东西。