【问题标题】:How to synchronize access on OSGi configuration如何同步访问 OSGi 配置
【发布时间】:2014-10-24 07:10:06
【问题描述】:

我目前正在编写一个服务,它会更改 ConfigurationAdmin 提供的配置。

因为 pid 后面的配置可能会被其他一些服务更新,尤其是在启动时,我有点担心同步。这是因为当时,我的服务通过 Configuration#update() 更新配置,它希望它与调用 ConfigurationAdmin#getConfiguration(String) 时得到的相同。但它有可能在这段时间内被另一个服务改变了——我想避免这种情况。

有什么想法吗?

编辑:这是用例 我想要做的是创建一个服务,为一组特定的 pid 设置默认配置。如果这样的 pid 有配置或有人设置了它,那么我不会对它做任何事情:

  1. 我从 configadmin 获取配置
  2. 我取它的属性
  3. 如果没有相关设置,我设置默认值并更新配置。

我只是担心某些事情会以这种顺序但异步发生:

  1. (线程 1)。我得到空配置,看到它是空的并设置默认值
  2. (线程 2)使用不需要默认值的属性更新配置
  3. (线程 1)由线程 1 更新和覆盖配置

因此我只想保证,当我检查配置是否为空然后设置默认值时,没有人会更新配置。

【问题讨论】:

    标签: java osgi


    【解决方案1】:

    您真的不应该让多方尝试管理相同的配置。听起来您确实需要多种配置,每一方管理一个。

    【讨论】:

    • 我添加了一个用例来解释我为什么要这样做。
    • 但是您仍然需要多方尝试管理单个配置。这是我说你需要避免的糟糕设计。只有一个“管理代理”应该负责管理 pid 的配置。
    猜你喜欢
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    相关资源
    最近更新 更多