2014-03-12 116 views
0

我确实有一个服务“A”,这个服务将从其他11个组件中使用。如果我通过osgi控制台检查所有可用的服务,我确实看到只有一个实例和所有11个组件使用此服务。OSGI两个相同服务的实例

但出于一些奇怪的原因,我不明白,其中两个组件不使用相同的服务实例。如果我调试我看到两个不同的ID。这怎么会发生? 而我没有提到here

我通过在eclipse中设置“这个组件被立即激活”解决了这个问题。但正如我红here,这不是这个复选框的目的。所以,也许有人可以解释这是怎么发生的,为什么它被修复了。

+0

你使用声明式服务吗?另外,你的意思是说Java对象ID是不同的? –

+0

@TassosBassoukos是的,我可以吗? –

+0

作为一个设计原则,你的服务应该能够容忍不是一个单身人士。正如答案所说,各种各样的事情可能会导致它重新初始化。如果您需要存储全局状态,则可以考虑其他选项。 –

回答

2

当您使用声明式服务时,DS运行时可能会在某些情况下重新实例化您的服务,通常是因为它所依赖的某些服务已经出现/更改/删除且引用是静态的。请查看全部使用服务A的站点是静态的,还是使用绑定/取消绑定方法都是动态的。

+0

是的,这是混乱,我混合静态和动态,thx。 –

相关问题