如何使用OSGi托管服务和配置管理来存储配置对象?

时间:2015-04-07 09:24:26

标签: java osgi

我正在尝试使用org.osgi.service.cm.ManagedService和Apache Felix的配置管理。

我了解ConfigurationAdmin通过方法

将新配置推送到服务
public void updated(Dictionary<String, ?> dctnr) throws ConfigurationException

但我有几个问题:

  1. 方法签名似乎表明,在Dictionary<String, ?>给定{i} {},我可以在配置中保留任何配置项。是这种情况,还是只有您可以用于配置值的字符串值?我还没有找到一个只使用Strings的例子。

  2. 鉴于您可以将对象保留为配置值,我必须遵循哪些约定才能使配置管理员实际保留它们?它们必须是Java Bean,还是Serializable或JaxB,或者完全不是其他东西?

  3. 我可以以某种方式从Configuration Admin中获取一些信息,描述为特定密钥返回的Object的类型吗? 假设我将一个日期放在一个密钥中,而一个字符串放在另一个密钥中,应用程序是否必须保留这些知识,或者我能以某种方式从ManagedService获取信息吗?

1 个答案:

答案 0 :(得分:1)

配置对象在Configuration Admin规范(请参阅OSGi Compendium Release 5 Specification)中定义为属性字典。属性值称为核心规范中定义的主要属性类型。

这是OSGi Core Release 5 Specification中主要属性类型的定义:

type ::= scalar | collection | array
scalar ::= String | Integer | Long | Float | Double | Byte | Short | Character | Boolean
primitive ::= int | long | float | double | byte | short | char | boolean
array ::= <Array of primitive> | <Array of scalar>
collection ::= <Collection of scalar>