0

我想在 OSGi 中创建一个配置对象,但不会持久化,因此在重新启动框架时它不会存在。类似于捆绑包的 START_TRANSIENT。

一些背景知识:我有一个基于 OSGi (Felix) 的客户端应用程序,部署在 OBR 上。我正在谈论的配置对象有效地启动了应用程序。这很好用,但有时内容在上下文停止时发生了变化。在这种情况下,它会在 OSGi 恢复所有捆绑包并添加所有配置选项时启动应用程序。然后我注入正确的配置,应用程序停止,然后再次重新启动。

所以它确实有效,但是应用程序启动了两次,在它重建其旧状态之前我无法访问框架。

有任何想法吗?

4

3 回答 3

1

OSGi 配置管理规范不支持这一点。对于我熟悉的任何 CM impl,我也不知道非标准方法。

于 2012-07-11T23:36:42.853 回答
1

正如 BJ 所说,Configuration Admin 规范中没有对此的标准支持。

但是,Felix 实现支持两个可能对您有所帮助的功能。首先,您可以设置felix.cm.dir配置 configadmin 保存其内部状态的位置的属性(默认情况下将在 Framework 存储目录下的某个位置)。您可以将其设置为您控制的位置,然后在每次启动 OSGi 时简单地擦除它(您也可以在每次启动时擦除整个 OSGi 框架存储目录......有些人这样做,但它会产生更广泛的后果要求)。

其次,如果您需要更多控制,Felix ConfigAdmin 支持使用PersistenceManager服务自定义其持久性。您可能可以实现这一点并为您想要控制的特定 pid 返回空/不存在。

于 2012-07-12T00:50:38.090 回答
0

好的,我最后做了以下事情:

  • 我创建了一个特殊的非常小的“引导”包,我没有从 OBR 提供它,而是从类路径安装它。

  • 捆绑包控制配置,当我真的想加载该配置时,我使用 START_TRANSIENT 。

不完全漂亮,它完成了工作。我确实认为在 OSGi 中进行临时配置是有意义的。

于 2012-07-13T08:38:09.190 回答