我正在使用Felix Configuration Admin庫來讀取和應用OSGi服務的配置文件。我配置的許多服務都是第三方(例如org.ops4j.pax.web.pax-web-jetty和org.ops4j.pax.url.mvn),並使用簡單的BundleActivator
而不是聲明式服務。我發現,這些服務均初始化兩次因爲如何立即獲取ManagedService配置?
- 他們打電話
ManagedService#updated(null)
激活和 - 很短的一會兒,菲利克斯
ConfigurationManager.UpdateThread
調用ManagedService#update(non-null)
異步。
我討厭這個延遲讓我的配置適用。由於固有的競爭條件,它會導致錯誤的失敗。是否有替代CM實現可以同步應用配置以避免此問題?或者我可以讓Felix同步嗎? (從源代碼和ManagedService javadoc的檢查看來,它看起來不是)。
謝謝尼爾,這非常有幫助。然而,這個建議有兩個問題:1)我正在使用的代碼不是我自己的代碼,而是org.ops4j.pax庫,所以我不能注入等待(或者我可以嗎?)和2 )我怎麼知道要等多久?這個問題在我的應用程序(https://issues.apache.org/jira/browse/KARAF-910)中導致了一個非常嚴重的故障,因爲下游服務試圖在使用註冊的org.ops4j.pax.url.mvn服務之前它被配置。 –