OSGi DS组件生命周期和参考

时间:2014-10-08 19:25:58

标签: reference osgi components lifecycle

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

带有DS组件C的Bundle B,它在服务上有一个引用R(aQute.bnd.annotation.component.Reference)(由其他一些bundle提供)。

当B启动时,实例化一个新的组件C并正确注入参考R ...

然后我就停止捆绑B,期待如果我再次启动它,那么:

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

(B)重用现有的组分C,并在C中注入R.

我发现(A)和(B)的混合物不起作用:

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

我的问题是:

  • 我应该期待(A)或(B)发生吗?
  • 或者:应该发生其他事情吗?
  • 是 - 可能 - 框架中的错误?
  • 或者:我首先得到了一些完全错误的东西吗?

事实是,我的代码对于一个简单的例子来说太复杂了,但我需要有人指出我正确的方向......在这种特殊情况下,我在解释有关声明性服务的OSGi规范时遇到了问题。它是否定义是否必须创建一个新的(组件C的)实例 - 或者旧的实例是否可以重用?

提前感谢任何提示!

1 个答案:

答案 0 :(得分:0)

正确的行为是(A)。听起来您需要针对您的DS实施(而不是框架)提交错误。

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

相关问题