配置值如何在 Felix 中持久化

How Configuration Values Persist in Felix

我一直在使用 Maven 在 felix 服务器上部署我的包。
Felix/OSGi 让我着迷的一件事是,如果我用一些值配置了一个组件,然后我再次部署了我的包,即使 @Activate 方法将再次为该配置调用,但我的值是在部署之前放在那里仍然存在。

Felix 是如何做到这一点的?/system/console/configMgr 中显示的配置不是我用来创建 OSGi 组件的 Java class 的实例吗?

OSGi 的配置由 Configuration Admin Service

处理

如果您使用 OSGi 容器,例如 Karaf,您会注意到您的配置独立于您的包 ($KARAF_HOME/etc),并由配置管理服务注入。

Configuration Admin service (for which Apache Felix provides an implementation) 的工作就是处理这些细节。理想情况下,"how" 是无关紧要的,因为这些是实现细节,但如果您是 运行 专用环境(例如嵌入式设备)中的 OSGi 框架,则必须 select在主机平台限制内工作的配置管理提供程序。

在后台,Felix 配置管理服务使用一个或多个 PersistenceManager 来保存和检索托管服务的配置数据。如果您对这些实施细节感到好奇,您可以 read about them on the Felix website or you can take a look at the source code.

如前所述,配置管理员是您的朋友。在 OSGi enRoute 中,我们有一个关于 Configuration Admin and a sample project with lots of Configuration Admin example code.

的页面