這幾天,項目組在部署JBOSS時遇到不少問題,都是由於JBOSS的類裝載問題引起,特發表一篇BLOG詳細說一下JBOSS的類隔離機制.
在部署應用到JBoss伺服器時,通常見到的問題就是應用所帶的jar包與容器自己的jar包版本不同導致的衝突,以及應用間jar包導致的衝突,JBOSS提供兩種隔離機制:
1. 部署包之間的隔離
2. 覆蓋JBoss Server的類的隔離
對於這兩種隔離,通常是修改部署文件來進行,以下進行說明:
部署包之間的隔離機制
對於.ear部署包,我們應該修改jboss-app.xml如下:
<jboss-app>
<loader-repository>
com.example:archive=unique-archive-name
</loader-repository>
</jboss-app>
對於.war部署包,在jboss-web.xml中定義如下:
<jboss-web>
<class-loading>
<loader-repository>
com.example:archive=unique-archive-name
</loader-repository>
</class-loading>
</jboss-web>
在JBoss 4.2.1中<class-loading>不再被支持,而4.0.5兩種方式都支持,直接修改為:
<jboss-web>
<loader-repository>
com.example:archive=unique-archive-name
</loader-repository>
</jboss-web>
在.sar部署包中,在jboss-service.xml定義如下:
<server>
<loader-repository>
com.example:archive=unique-archive-name
</loader-repository>
</server>
示例中,com.example:archive=unique-archive-name代表jar倉庫的對象名objectName ,其中,com.example可以隨意取,unique-archive-name 就用部署包的名字即可,例如com.example:archive=helloworld.sar,保證這一串唯一即可.而com.example將出現在JMX-Console 列出的節點上(每個節點為一個LoaderRepository domain:jar參考的域概念,其實就是一個所有jar容器倉庫的分組概念)
對於部署包內內嵌了其他部署包,只有最上層的部署描述配置才起作用,例如:
.ear中包含了.sar和.war,這隻有.ear中的META-INF/jboss-app.xml 中定義的隔離範圍才會起作用.
.sar中包含了.war,則只有.sar META-INF/jboss-service.xml中定義的隔離範圍才起作用
覆蓋JBoss Server的類的隔離
對於jboss-app.xml:
<jboss-app>
<loader-repository>
com.example:archive=unique-archive-name
<loader-repository-config>
java2ParentDelegation=false
</loader-repository-config>
</loader-repository>
</jboss-app>
對於jboss-web.xml:
<jboss-web>
<class-loading java2ClassLoadingCompliance="false">
<loader-repository>
com.example:archive=unique-archive-name
<loader-repository-config>java2ParentDelegation=false</loader-repository-config>
</loader-repository>
</class-loading>
…
jboss-service.xml:
<server>
<loader-repository>
com.example:archive=unique-archive-name
<loader-repository-config>java2ParentDelegation=false</loader-repository-config>
</loader-repository>
…
淺談如何將EJB部署在Jboss下
Apache HTTPServer與Tomcat/JBoss的配置
紅帽升級JBoss 意在Java中間件雲平台
運行多個JBoss在同一台機器的配置方法介
Java平台的企業級Ruby解決方案:JBoss的T
EAR or WAR的類將按照以下順序裝載:
1. WEB-INF/lib (for WARs)
2. server/default/lib下的jar包
3. tomcat的jar包server/default/deploy/jbossweb-tomcatxxx.sar,與server/default/lib將混合在一起,不區別順序.
[火星人
]
JBoss的兩種類隔離機制配置說明已經有1191次圍觀
http://coctec.com/docs/java/show-post-59817.html