2014-10-08 48 views
0

我具有以下設置(菲利克斯OSGi框架4.4.0):OSGi的DS組件的生命週期和參考

一個捆B與具有參考R A DS組分C(aQute.bnd.annotation.component。參考)服務(由其他軟件包提供)。

當B的開始,一個新的C成分被實例化和參考R的正確注射...

然後我停止包B,期待的是,如果我再次啓動它,要麼:

(A)一個新的組件C '被實例化和R被注入在C' 或

(B)的現有組件C被重複使用,並且R在C.

注入什麼情況是,我(A)和(B)的混合物不起作用:

一個新的組件C '被實例化 R在Ç,不Ç注入'

我的問題是:

  • 我應該期待(A)或(B)發生?
  • 或者:應該發生其他事情嗎?
  • 是否 - 可能 - 框架中的錯誤?
  • 或者:首先我得到了一些完全錯誤的東西嗎?

事情是,我的代碼太複雜了,但我需要有人指點我正確的方向......在這種特殊情況下,我在解釋有關聲明式服務的OSGi規範時遇到了問題。它甚至定義了是否必須創建一個新的(組件C的)實例 - 或者舊的實例可以被重用?

在此先感謝您的任何提示!

回答

0

正確的行爲是(A)。聽起來你需要針對你的DS實現(而不是框架)提交一個錯誤。

當一個bundle被停止時,它的所有組件都必須被停用,然後被丟棄,永遠不會被重用。所以當bundle重新啓動時,DS impl必須創建新的組件實例。