TOC
相对于Jboss之前的版本,AS7的类加载机制完全不同,AS7的类加载是基于JBoss模块来设计的。
#什么是模块 模块是classes和resources的集合,每一个模块对应着一个classloader。模块之间可以存在依赖关系,如果一个模块里面的Jar包需要用到另一个模块Jar包里面的类,那么需要显式声明模块依赖,否则模块与模块之间是不可见的。同样,如果部署一个应用到JBoss AS7容器,应用需要依赖模块,也要显式声明模块依赖。
如果要深入了解JBoss AS7模块加载的机制,可以看:JBoss模块分析
#模块的好处 1. 相同版本的Jar包不会被重复加载。 2. 避免Jar包的版本冲突问题。 3. 提供了更加高效的类加载机制。
#JBoss AS7的模块 在JBoss AS7安装目录下面,有一个叫modules的文件夹,里面就内置了相当多的模块。
我们以org.apache.commons.beanutils这个模块为例,进入文件夹:
total 232
-rw-r--r--. 1 root root 232019 Jan 2 2013 commons-beanutils-1.8.3.jar
-rw-r--r--. 1 root root 1540 Jan 2 2013 module.xml
其中module.xml为模块的描述文件, 里面的内容:
<module xmlns="urn:jboss:module:1.1" name="org.apache.commons.beanutils">
<properties>
<property name="jboss.api" value="private"/>
</properties>
<resources>
<resource-root path="commons-beanutils-1.8.3.jar"/>
<!-- Insert resources here -->
</resources>
<dependencies>
<module name="org.apache.commons.logging"/>
<module name="org.apache.commons.collections"/>
</dependencies>
</module>
name=“org.apache.commons.beanutils”这个是模块的名称,也是模块的唯一标识符,模块之间就是通过指定该名字来添加依赖。
resources 描述了模块包含了那些Jar文件
dependencies 定义了该模块需要依赖的模块
#怎样将Jar配置成JBoss的模块 如果需要将一个第三方的Jar配置成JBoss的模块,也很简单,先定义好module.xml文件,根据name在JBoss的modules下建立对应的目录结构,最后将module.xml 和Jar包放到建好的main目录里头,这个Jar就变成了JBoss的一个模块。具体步骤网上很多,这里就不赘述。