从Jboss5迁移到Jboss7
1. Jboss7新特性
1.1 构建在Modular Service Container上,充分地利用了多核处理器的能力,并发、按需启动服务,启动速度更快、占用内存更小。
1.2 全面兼容Java EE6
1.3 支持JDK6/7
1.4 统一的配置和管理
1.5 兼容OSGI 4.2,支持OSGI和Java EE组件模型集成。
1.6容易测试:利用Arquillian测试平台—一种集成测试组件模型,更易于测试,改变-编译-测试的周期更短。
1.7 两种模式
Standalone模式(使用standalone.bat启动)相当于以前的3、4、5、6版本。配置文件、发布内容等放在standalone目录下。
Domain模式(使用domain.bat启动)是Jboss7的一个新特征,可以在一个控制点管理多个服务器。
1.8 类加载
类加载基于Jboss Module,取代了层次类加载环境,避免了当类存在多个版本时,导致类加载错误。由于类加载是基于模块的,必须显示的定义模块依赖。部署也是模块化的,如果没有显示的定义类依赖则不能访问应用服务器jar中的类。
2. 迁移步骤
在Jboss7部署项目与在jboss5上有很大区别,最主要原因是由于类的加载模式改变了。Jboss5部署相对简单,只需将相应的包部署到lib和deploy目录即可,类加载器会按层次自动加载,不用配置依赖关系。而jboss7完全不一样,jboss7是按模块化加载,不同模块由不同类加载器加载,其他模块的jar包,对其是不可见的,这时需要手动配置包之间依赖关系,否则会报ClassNotFoundException等错误。另外对于数据源和JNDI的配置也发生了变化,所以把项目从Jboss5往Jboss7迁移时可以大概分为下述3个步骤:
2.1 依赖关系的配置
在Jboss7中,模块之间的依赖关系分为隐式依赖和显式依赖。
2.1.1隐式依赖
尽管Jboss7中模块默认是隔离的,在部署过程中,一些由应用服务器定义的模块依赖会自动装配。例如,如部署一个Java EE应用,将自动添加Java EE API依赖,这也称为隐式模块依赖。
2.1.2显式依赖
对于显式依赖,必须在MANIFEST.MF文件的“Dependencies:”或“Class-Path:”项或在Jboss7特有的部署文件jboss-deployment-structure.xml中显式定义。对于已有的项目,手动去查找各个模块之间的依赖关系是费时又费力的,可以通过Tattletale工具来分析,在分析报告的OUTPUT_DIRECTORY/index.html文件中点击"JBoss A7"则可以得到部分依赖关系,另外的依赖关系可以在“Depends On”中得到。
在Jboss7中类的加载优先级(从高到低):
(1)系统依赖 - 服务器自动加载的模块依赖,包括Java EE