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

Configuring an OSGi managed service via the configuration admin API

考虑在 SERVICE_PID "a.b.c".

上注册的托管服务

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

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

如果我也这样做,结果将流入 'updated' 方法,其中 PID 的末尾有一个唯一的字符串。所以我以后无法想出相同的字符串来通过调用 'update'.

来改进它

如果创建工厂配置,则只能定义工厂 pid。单独的配置 pid 由配置管理实现选择。

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

找到它

OSGi R7 改变了这个问题的答案。 ConfigurationAdmin 中有两种新方法可让您创建具有可预测 PID 的出厂配置。

  • Configuration getFactoryConfiguration(String factoryPid, String name, String location)

  • Configuration getFactoryConfiguration(String factoryPid, String name)

生成的 PID 是通过将 factoryPidname 与波浪字符 ~ 作为分隔符连接而成的。