JBoss Module介绍
JBoss Module介绍
于 2011-11-27 01:47:36 发布
·
289 阅读
·
0
·
0
文章标签:
#modules
#jboss
#java
Java
同时被 2 个专栏收录
11 篇文章
订阅专栏
JBoss
9 篇文章
订阅专栏
本文详细介绍了JBossModules在JBossAS7中的设计思路、新特性和实际使用方法,通过创建并加载模块的实例,解释了如何解决传统classpath加载方式存在的问题,如资源浪费和版本冲突,并展示了如何利用模块化提高系统效率。
摘要生成于
C知道
,由 DeepSeek-R1 满血版支持,
前往体验 >
从JBoss AS7开始,Classloader这块开始使用全新的JBoss Modules。与传统的使用classpath加载方式相比,JBoss Modules在设计阶段就考虑到了在旧有classpath loading模式下的一些问题。本文通过实例来介绍JBoss Modules的设计思路,新特性以及实际使用方法。[b]介绍[/b]我们都知道,Java一直使用classpath的方式来加载各种class和jar的资源。这样的方式会造成许多问题,比如下面这些经常会遇到的问题:# 一个大的项目中,有的classpath当中的资源被加载后可能根本不会被用到,这就造成了系统资源的浪费# 同一个classpath当中的资源,可能包含多个不同版本的同一个资源,这就造成了版本冲突,可能会导致整个项目无法运行并且很难进行排错,因为我们的项目可能非常大,里面有成百上千个jar,要想找到相冲突的资源,非常困难针对这些问题,JBoss Modules都从设计上面给出了解决方案:# 通过使用module.xml描述文件定义模块,在这个描述文件中要包含模块的名称,都包含哪些资源(一般一个模块对应一个jar文件,也可以包含多个jar或其它资源),这些资源的版本号,以及这个模块都依赖于哪些模块。# 每一个模块都可以实时地加载或卸掉。这样做有很多好处:首先是资源方面的节省,只有需要的模块才被加载(这一点是通过module.xml中定义的模块之间的依赖关系来实现的),这一方式同时来带的好处是:整个系统的加载速度大大提升了。[b]实例[/b]在AS7的根目录下面有一个jboss-modules.jar,这个就是JBoss Modules本身了。我们可以亲手做一个附合JBoss Modules标准的模块,然后使用jboss-modules.jar来加载我们的模块,这样会对JBoss Modules有一个更为直观的了解。我们先用Maven来创建一个非常简单的Helloworld项目:mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=net.bluedash.demo -DartifactId=helloworld执行上面的mvn命令便生成了一个简单的java项目:liweinan@cute:~/projs/helloworld$ tree.|-- pom.xml`-- src |-- main | `-- java | `-- net | `-- bluedash | `-- demo | `-- App.java `-- test `-- java `-- net `-- bluedash `-- demo `-- AppTest.java这个项目里面只有一个App.java,这个类中包含一个main方法,里面有一行非常简单的代码:System.out.println("Hello, world!");我们把这个项目使用maven生成jar包:mvn package生成了helloworld-1.0-SNAPSHOT.jar:liweinan@cute:~/projs/helloworld/target$ lshelloworld-1.0-SNAPSHOT.jar接下来我们要做的是把这个jar变成一个JBoss Modules可以加载的模块。首先打开AS7的根目录,里面有个modules目录:liweinan@cute:~/projs/as7$ lsbin docs jboss-modules.jar standalonebundles domain modules welcome-content这个目录当中包含了各种模块,我们也将我们的helloworld模块放在这个目录里面,首先为我们的模块创建目录:liweinan@cute:~/projs/as7$ mkdir -p modules/net/bluedash/demo/main目录创建完成后,我们将在modules/net/bluedash/demo/目录当中创建我们的模块的描述文件module.xml,文件内容如下: