Reference OSGi DS组件生命周期和参考

Reference OSGi DS组件生命周期和参考,reference,osgi,components,lifecycle,Reference,Osgi,Components,Lifecycle,我有以下设置(在felix osgi framework 4.4.0上): 带有DS组件C的捆绑包B,该DS组件C在服务(由其他捆绑包提供)上具有引用R(aquet.bnd.annotation.component.reference) 当B启动时,一个新的组件C被实例化,引用R被正确地注入 然后,我停止bundle B,期望如果我再次启动它,会: (A) 一个新的组件C'被实例化,R被注入C'或 (B) 现有组件C被重用,R被注入到C中 发生的情况是,我有(a)和(B)的混合物,它不起作用:

我有以下设置(在felix osgi framework 4.4.0上):

带有DS组件C的捆绑包B,该DS组件C在服务(由其他捆绑包提供)上具有引用R(aquet.bnd.annotation.component.reference)

当B启动时,一个新的组件C被实例化,引用R被正确地注入

然后,我停止bundle B,期望如果我再次启动它,会:

(A) 一个新的组件C'被实例化,R被注入C'或

(B) 现有组件C被重用,R被注入到C中

发生的情况是,我有(a)和(B)的混合物,它不起作用:

一个新的组件C'被实例化,但R被注入C,而不是C'

我的问题是:

  • 我应该期待(A)或(B)发生吗
  • 或者:应该发生其他事情吗
  • 它是否可能是框架中的一个bug
  • 或者:我一开始是不是完全错了
问题是,我的代码对于一个简单的例子来说太复杂了,但我需要有人给我指出正确的方向。。。在这种特殊情况下,我在解释有关声明性服务的OSGi规范时遇到问题。是否定义了是否必须创建(组件C的)新实例,或者是否可以重用旧实例

提前感谢您的任何提示

正确的行为是(A)。听起来您需要针对DS实现(而不是框架)提交一个bug

当捆绑包停止时,其所有组件都必须停用,然后丢弃,永远不能重复使用。因此,当bundle重新启动时,DS impl必须创建新的组件实例