2012-11-14 38 views
4

我正試圖在JBoss AS7(7.2.0-Alpha)中部署guice。這是作爲一些罐子。我感興趣的那些是如何確保我的OSGi碎片在主機捆綁之前安裝?

  • 吉斯
  • 吉斯 - servlet的
  • 吉斯 - 堅持

吉斯是一個主機包和吉斯,servlet和吉斯 - 堅持是這個片段主辦。

當我啓動容器時,主機捆綁包總是被安裝,解析並變爲活動狀態。碎片總是會被安裝,有時會被解析並被「包含」在主機捆綁中,有時卻不會。這似乎是隨機的。

我也嘗試過Eclipse的處女座和行爲是相同的,但是,它有確定的計劃,讓你可以通過定義安裝順序繞過這個問題的能力。 (無論如何,我似乎可以使它工作)。

縱觀OSGi的規範和閱讀這個問題的答案question好像這是預期的行爲。 JBoss是一個OSGi 4.2容器,所以Require-CapabilityProvide-Capability頭文件不是一個選項 - 再加上我不想修改不屬於我的jar文件。

我該如何讓主機/碎片捆​​綁包可靠地安裝和解析?

我有一個想法(我不願意這樣做,因爲它看起來不正確)是使用maven-bundle-plugin/bndtools並將guice bundle合併成一個超級guice bundle - 有效在建造時做什麼容器不能爲我做的事情在runtme。片段如果主機結算前,它被安裝將被連接到主機:

回答

7

正如我在回答你鏈接到問題時說。實現這一點的最簡單方法是先安裝所有包(包括碎片),然後再允許其中的任何一個進行解析。

在很多情況下,通過嘗試啓動捆綁包來觸發解決方案。人們在OSGi中犯的最常見的錯誤之一是試圖在安裝後立即啓動每個捆綁包。你不能做到這一點,即你不應該啓動任何包,直到你已經安裝了要運行所有捆綁後。

+0

謝謝,這很清楚。看來我的JBoss版本選擇安裝,然後直接解決主機捆綁。不太清楚爲什麼。可能是JBoss OSGi傢伙的一個問題。 – pauli

+0

看來在JBoss中,如果我將bundle部署到「bundles」文件夾結構中,它將首先安裝所有bundle,然後僅在需要時才解析。如果我部署到通常用於熱部署的「部署」文件夾中,它將單獨安裝並解析每個包 - 這會導致我的問題。 – pauli

+0

我認爲你在第一句中有一些額外的單詞,我無法完全解析你的意思:_「片段將被附加到它的主機被安裝在主機解決之前」_ – pimlottc