2009-07-16 32 views
1

我有幾個單獨的應用程序項目(EAR)和多個我想要部署到同一個JBoss服務器的EJB。現在,一些項目可能具有相同的EJB,但版本不同。在類似情況下,某些項目可能會使用不同版本的相同「普通」類(即在VM中加載的類,而無需JNDI查找)。使用OC4J,這看起來沒有問題,但現在在JBoss中,我得到的印象是,所有東西都駐留在同一個「名稱空間」(或類加載器)中。我在這個假設中糾正了嗎?將同一個EJB和類的多個版本部署到同一個JBoss服務器

基本上,我想要做的(或保證)兩件事情:

  • 從客戶端,做一個EJB的JNDI的查找,我希望能夠以表明它位於哪個應用程序in,以便返回正確版本的EJB。

  • 從EJB內部,當實例化一個類時,我想確保該類是與EJB相同的應用程序(EAR)部署的類。

我想我讀過你可以爲EJB配置一些「隔離」屬性,我猜對了,這可能會解決我的第二點?

回答

2

你是正確的,來自不同EAR的類位於同一個「空間」。 JBoss默認使用平面類加載器層次結構,這意味着所有類(WAR包裝器除外)都由同一個類加載器加載。隨着JBoss 5的推出,新的標準配置文件嚴格遵循Java EE規則,因此支持隔離類加載。較早的JBoss版本也支持通過部署器配置中的callByValue隔離屬性的行爲。

5

JBoss的默認行爲是使用平面類加載器。這樣可以減少佔用空間,但正如您發現的那樣,這使部署多個應用程序變得很麻煩。

謝天謝地,修復很簡單。在ear-deployer.xml文件中deploy目錄,請確保以下參數設置:

<attribute name="Isolated">true</attribute> 

這會給每個部署的EAR自己的類加載器的空間。它仍然能夠從JBoss lib目錄訪問東西,但部署的EAR將彼此不可見。

+0

感謝您的回覆!我最終選擇Kettelerijs的答覆作爲接受的答案,但您的答覆也非常有用。 – Brummo 2009-07-23 08:22:36

相關問題