Java OSGI是同一服务的两个实例

Java OSGI是同一服务的两个实例,java,eclipse,service,osgi,equinox,Java,Eclipse,Service,Osgi,Equinox,我有一个服务“a”,该服务将从其他11个组件中使用。如果我通过osgi控制台检查所有可用的服务,我只看到一个实例和所有11个使用该服务的组件 但出于某种奇怪的原因,我不明白,其中两个组件不使用相同的服务实例。如果我调试,我会看到两个不同的ID。这怎么会发生? 我没有做任何提到的事情 我通过在eclipse中设置“立即激活此组件”解决了这个问题。但正如我所说,这不是这个复选框的目的。因此,也许有人可以首先解释这是如何发生的,以及为什么在启用此功能的情况下会对其进行修复。当您使用声明性服务时,DS运

我有一个服务“a”,该服务将从其他11个组件中使用。如果我通过osgi控制台检查所有可用的服务,我只看到一个实例和所有11个使用该服务的组件

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


我通过在eclipse中设置“立即激活此组件”解决了这个问题。但正如我所说,这不是这个复选框的目的。因此,也许有人可以首先解释这是如何发生的,以及为什么在启用此功能的情况下会对其进行修复。

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

是否使用声明性服务?另外,您的意思是java对象ID不同吗?@TassosBassoukos确实是的,我可以不这样做吗?作为一个设计原则,您的服务应该能够容忍不是一个单例。正如答案所说,各种因素可能会导致它被重新初始化。如果需要存储全局状态,可以考虑其他选项。