2016-06-26 22 views
1

我在我的項目中使用OSGi組件工廠概念,它按預期工作。請查找我已完成的步驟。OSGi組件工廠雖然karaf實例被殺死,但對象被創建兩次

步驟:

  1. 登錄到使用ssh命令[因爲它不是根用戶所以我在karaf創建的實例] karaf。

  2. 已執行scr:list。它顯示我已部署的服務。因爲我已經使用了組件工廠對象,所以OSGi框架 創建並按預期工作。

  3. 使用「shutdown」命令關閉karaf。
  4. 使用ssh命令再次登錄到karaf。
  5. 執行scr:list後,對象被複制。即對象正在創建一次,並顯示兩次。

當關閉karaf被停止時,停用方法被調用並且相應的java進程被終止。 一旦我再次啓動karaf進程,就會創建一個新進程[我通過檢查java進程的PID來驗證它。 我提出這個問題的原因如下

  1. 因爲我使用組件工廠內存管理應該會自動處理。即 如果我關閉karaf實例對象應該被釋放並獲取垃圾回收。
  2. 雖然我的應用程序設計不佳,但在關閉java進程scr:list之後,應該不會顯示兩次對象。即java進程關閉後 相應的內存應該被清除。最終它不應該影響新創建的進程。

環境:RHEL 6.5

Apache的karaf:3.0.3

JRE:1.7-U 79

回答

1

這可能是一個已知的bug。我假設你正在創建一個使用功能文件的默認配置?這在管理服務工廠的當前karaf版本中似乎被打破了。所以如果是這種情況,那麼應避免在功能文件中定義默認配置。

+0

謝謝基督徒!抱歉,我無法理解您提到的默認配置。另外如果可能的話,請你分享我的錯誤細節,以便我可以更新到更高版本的卡拉夫。 – Shriram

+0

當然,我們正在使用一個功能文件來安裝我們的軟件包。 – Shriram