2012-05-17 40 views
2

我們有兩個軟件包,都嵌入了相同第三方庫的不同版本,我們必須在不同的配置下使用它們。不幸的是,該庫只能通過系統屬性進行配置。OSGi框架可以同時啓動包嗎?

因此,我們嘗試做以下的Activator類:

  1. 設置所需的系統性能,
  2. 初始化庫,
  3. 在解封前的系統性能。

如果一個OSGi框架同時啓動這兩個bundle,它將不起作用。是否允許OSGi框架實施?這個解決方案安全嗎?有沒有其他方法可以爲不同的捆綁包設置相同的系統屬性爲不同的值?

(如果有可能,我們想避免這些束設定不同的啓動級別。)

回答

3

OSGi框架實現允許啓動包,一個給定的起始水平內,同時。因此,您可以將捆綁包放在不同的起始級別,以確保一個在另一個之前開始。

1

在Felix和Equinox中,bundle安裝/解決/開始/停止/卸載操作都發生在單個線程上。我無法確定激活者是否在同一個線程上運行,但我認爲他們這樣做。

1

如何創建一個包裝庫初始化的OSGi服務。所以你只需要做一次。或者,服務可以同步初始化,因此確保它不會同時發生。

+0

謝謝!它可以工作,服務必須回調兩個初始化代碼,或者我們可以在激活器中使用某種信號量服務來防止併發初始化。 – palacsint

0

這是一個強烈的要求,讓他們在單獨的捆綁? 你對圖書館做了什麼,你把它們作爲java包導出還是你從它們中創建服務? 如果你可以把這兩個庫放在同一個包中,你可以完全控制它,這個控件是初始化的,哪個是第一個。

順便說一下,如果您使用Export-Package將其導出到包清單中,那麼即使捆綁包處於RESOLVED狀態(即已安裝但尚未啓動),其他包也可以使用導出的包。所以有可能在你的Bundle Activator被創建之前調用了lib的方法,並且已經處理了初始化操作......

+0

感謝您的回答!它們是同一第三方的不同版本,因此兩個庫都包含或多或少相同的包和類。因此,如果不在bundle中使用自定義類加載器來分離它們(我們試圖避免),它們就不能在同一個bundle中。 (只有一種服務可以在軟件包外部使用,而不是軟件包。) – palacsint

相關問題