我正在使用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服务之前它被配置。 –