【问题标题】:Can I create a transient configuration in OSGi using the ConfigAdmin?我可以使用 ConfigAdmin 在 OSGi 中创建临时配置吗?
【发布时间】:2012-07-11 14:29:41
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

    标签: osgi equinox apache-felix


    【解决方案1】:

    好吧,我最后做了如下:

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

    • 那个包控制配置,当我真的想加载那个配置时,我使用 START_TRANSIENT。

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

    【讨论】:

      【解决方案2】:

      正如 BJ 所说,配置管理规范中对此没有标准支持。

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

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

      【讨论】:

      • 可惜,我害怕那个。我考虑过使用启动级别延迟启动使用配置的捆绑包,但这不适用于 OBR(?至少我在部署 OBR 时看不到设置启动级别的方法)。我会想到一些 hack,没有一个选项是漂亮的 ;-) 谢谢伙计。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-05-18
        • 1970-01-01
        • 1970-01-01
        • 2023-02-21
        • 2011-06-28
        • 2016-09-17
        • 2021-05-05
        • 1970-01-01
        • 2020-10-18
        相关资源
        最近更新 更多