2011-11-27 84 views
26

在JBoss-as-7.0.x獨立部署中加載第三方JAR的最佳實踐是什麼?在JBoss AS7獨立部署中加載第三方JAR的最佳實踐?

我曾嘗試:

  1. 部署每個JAR與它自己的module.xml desriptor一個獨立的模塊;
  2. 在WAR的WEB-INF/lib目錄中部署JAR;
  3. 和跨多個WAR共享的任何JAR的foo.ear/lib目錄。

上述方法1的明顯優勢是在部署時減少了內存佔用2和方法3。但是,由於JAR需要明確每個依賴關係,因此它的維護似乎非常艱鉅在module.xml中定義,這對大量的第三方庫來說似乎不太可維護。

+0

我想遷移到JBoss7並不斷獲取類路徑輸入錯誤,例如。 「不指向一個有效的類路徑引用jar」 - 似乎你解決/沒遇到這樣的錯誤。這可能與JBoss7 Class加載有關,不少人遇到同樣的問題,但沒有解決方案 - 你有什麼想法嗎? –

+0

聽起來像你的問題要麼在你的module.xml文件中(如果你正在將JAR加載爲模塊)或者你的jboss-deploment-structure.xml文件。引用靜態庫JAR的最好方法是將它們放在modules目錄的子目錄中。如果您試圖引用「org.foo.bar.FooBar;」在你的FooBarJar.jar文件中,你的目錄結構想成爲「JBOSS_HOME/modules/org/foo/bar/main/FooBarJar.jar」,你需要包含你的「JBOSS_HOME/modules/org/foo/bar/main /modle.xml「文件來定義映射到jar以及它可能具有的任何依賴關係... – travega

+1

...(繼續)您的模塊。xml文件將如下所示: <! - - 在此插入資源 - > <依賴性> <! - 在此處插入依賴 - > 」。然後,您可以將模塊引用添加到位於WAR的WEB-INF目錄中的jboss-deploment-structure.xml文件。這會看起來像這樣:「」...... – travega

回答

16

對於較小的依賴關係,這對於部署是私有的,請將WEB-INF/lib保留在您的.war中,這就是它的用途。如果您使用的Maven對於範圍內的任何內容都應該是非常自動和透明的。

對於大的,複雜的依賴關係或依賴性那將幾個應用程序之間共享,使用選項(4):

部署每個邏輯庫(如「OpenJPA的」或「Log4J的」)作爲一個模塊,包括它的api和impl jars以及其他AS7模塊尚未提供的依賴JAR。如果已經有一個模塊添加了對它的依賴關係,而不是添加JAR到你的模塊。如果幾個不同的庫共享一些常見的依賴關係,請將它們拆分爲模塊並將其作爲模塊依賴關係添加到module.xml中。

使用jboss-deployment-structure.xml進行部署.war/.ear /任何聲明模塊的依賴關係,如果它不是自動檢測和自動加載。

我覺得這是一箇中等到低調的方法,效果很好。在部署中將所有東西都轉儲到WEB-INF/lib更麻煩,這是Java EE標準要做的事情。它加速了重新部署,並通過減少類別/版本衝突來節省大量的部署/測試時間。

如果您願意做一些工作,您可以使用Maven和maven-dependency-plugin生成已包含傳遞依賴項的模塊。你可以在module I wrote for EclipseLink integration in AS 7中看到一個例子。我儘可能自動創建AS7模塊。

+0

在羣集(域)環境中,您是否可以將模塊打包到.war或其他容器中,並將其部署到域控制器中的所有從服務器?或者,你是否手動將模塊複製到每個slavedirectory/modules/...? – Gregor

+0

@Gregor我還沒有使用集羣模式,所以我不知道。我懷疑你可能需要手動複製,但自從我對JBoss AS和Java EE做了任何事情(幸好)已經過去了幾年。對不起,我忍不住。嘗試發佈一個新問題並將其鏈接回上下文。 –

+0

@Gregor找到了域模式的解決方法。我的域也不會在重新啓動時加載模塊 – Aadam