我想在OSGi中创建一个配置对象,但不会持久化,因此在重新启动框架时它不会存在。与START_TRANSIENT for bundle相似。
一些背景:我有一个基于OSGi(Felix)的客户端应用程序,部署在OBR上。我正在谈论的配置对象有效地启动了应用程序。这工作正常,但有时内容在上下文停止时发生了变化。在这种情况下,它会启动应用程序,因为OSGi会恢复所有捆绑包并添加所有配置选项。然后我注入正确的配置,应用程序停止然后再次重新启动。
所以确实可以正常工作,但应用程序启动了两次,在重建旧状态之前我无法访问框架。
有什么想法吗?
答案 0 :(得分:1)
OSGi配置管理规范不支持此功能。对于我熟悉的任何CM impl,我也不知道非标准的手段。
答案 1 :(得分:1)
正如BJ所说,在配置管理规范中没有对此的标准支持。
但是Felix implementation支持两个可能对您有帮助的功能。首先,您可以设置felix.cm.dir
属性,该属性用于配置configadmin保存其内部状态的位置(默认情况下,它位于Framework存储目录下的某个位置)。您可以将其设置为您控制的位置,然后在每次启动OSGi时简单地擦除它(您也可以在每次启动时清除整个OSGi Framework存储目录......有些人会这样做,但它会产生更广泛的影响要求)。
其次,如果您需要更多控制,Felix ConfigAdmin支持使用PersistenceManager
service自定义其持久性。您可以实现此操作,并为您要控制的特定pid返回空/不存在。
答案 2 :(得分:0)
好的,我最后做的是以下内容:
我创建了一个特殊的小'boot'软件包,我没有从OBR中提供,而是从类路径安装它。
该包控制配置,我真正想加载该配置时使用START_TRANSIENT。
不完全漂亮,它完成了工作。我认为瞬态配置在OSGi中是有意义的。