2011-04-20 78 views
0

我有兩個war文件app1.war和app2.war部署在單個JBoss實例中。 Java類兩種戰爭文件包名稱與com.myapp開始在JBoss中部署2個帶有公共類的war文件

爲了進一步增加,有幾類,而也有一些具有相同的完全限定類的名字,但有不同的(這是兩個應用程序之間的共同源代碼已更改)。

我想知道,如果這可能對部署方案構成任何形式的威脅?

回答

0

最好的辦法是爲您的應用程序歸檔隔離類加載。

對於JBoss 5.1.0 GA以下爲我工作。

  1. 創建的jboss-classloading.xml文件中的WEB-INF文件夾中。
  2. 添加下列行到該文件

這裏, 出口所有=「NON_EMPTY」 =>確保加載該應用程序的類不會導出 進口所有=「true」=>導入並使用所有可用的類定義。 parent-first =「false」=>如果找到多個具有相同名稱的類,則首先使用在該應用程序下定義的一個類。

僅供參考。這也幫助我將log4j的日誌配置嵌入到應用程序戰爭文件中。需要將log4j.xml放在WEB-INF/classes中,並在WEB-INF/lib文件夾中放置一個log4j.jar。

0

如果您的應用程序不是孤立的,即擁有自己的類加載存儲庫和類加載器,則可能會遇到類加載問題。如果你將JBoss配置爲隔離應用程序,你應該沒問題(我不知道你的版本默認是什麼,但我們使用的4.2.3默認不會隔離應用程序)。

要澄清一點:

如果你有兩個班,不同的實現,但同樣FQCN你可以得到的類加載器的錯誤類被加載第二應用。即使實現是相同的,如果一個應用程序從另一個應用程序獲取該類,則可以獲得類轉換異常或其他奇怪行爲。

0

我曾與多個apps.Look了類似的情況,在每個應用程序或獨立模塊我solution here

0

將會有一個類加載器實例。換句話說,app1.war中的類將被加載到與app2.war中的類不同的類加載器中。這是任何Java EE服務器的默認行爲;所以,對於具有相同包/名稱和/或不同內容的課程而言,這並不重要。這是任何Java EE服務器的默認行爲。儘管如此,如果您調整了服務器的類加載器策略,或嘗試使用除Thread.currentThread().getContextClassLoader()以外的任何其他類加載類(反映),則可能會出現問題。