我有以下设置(在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' 。
我的问题是:
事实是,我的代码对于一个简单的例子来说太复杂了,但我需要有人指出我正确的方向......在这种特殊情况下,我在解释有关声明性服务的OSGi规范时遇到了问题。它是否定义是否必须创建一个新的(组件C的)实例 - 或者旧的实例是否可以重用?
提前感谢任何提示!
答案 0 :(得分:0)
正确的行为是(A)。听起来您需要针对您的DS实施(而不是框架)提交错误。
当捆绑包停止时,必须停用其所有组件,然后丢弃它们永远不会重复使用。因此,当捆绑包重新启动时,DS impl必须创建新的组件实例。