通过配置管理API配置OSGi托管服务

通过配置管理API配置OSGi托管服务,osgi,Osgi,考虑在服务PID“a.b.c”上注册的托管服务 我需要两个不同的代码位来指定特定工厂PID的配置 ConfigurationAdmin.createFactoryConfiguration()只接受工厂PID,而不是实例PID。那么,如何获取特定项的配置字典?例如,felix fileinstall解析像PID-FACTORYPID这样的文件名,然后丢弃FACTORYPID并仅在PID上调用createFactoryConfiguration 如果我也这样做,那么结果将流入“updated”方法

考虑在服务PID“a.b.c”上注册的托管服务

我需要两个不同的代码位来指定特定工厂PID的配置

ConfigurationAdmin.createFactoryConfiguration()只接受工厂PID,而不是实例PID。那么,如何获取特定项的配置字典?例如,felix fileinstall解析像PID-FACTORYPID这样的文件名,然后丢弃FACTORYPID并仅在PID上调用createFactoryConfiguration


如果我也这样做,那么结果将流入“updated”方法,并带有一个PID,该PID的末尾有一个唯一的字符串。因此,我以后无法使用相同的字符串通过调用“更新”来改进它。

如果创建工厂配置,则只能定义工厂pid。单个配置pid由配置管理impl选择


以后找到此类配置的最佳方法是对其具有的一个或一些属性使用筛选器。例如,您可以给它一个属性myid=1,然后用过滤器(myid=1)找到它。

这个问题的答案在OSGi R7中已经改变。
ConfigurationAdmin
中有两个新方法,允许您使用可预测的PID创建工厂配置

  • Configuration getFactoryConfiguration(字符串factoryPid、字符串名称、字符串位置)

  • Configuration getFactoryConfiguration(字符串factoryPid,字符串名称)

生成的PID是通过将
factoryPid
name
与波浪号字符
~
作为分隔符串联而成的