从Tomcat升级到JBoss5.1真是一个痛苦的过程,可能遇到很多问题。以下是我碰到的问题,及解决方法。
一.Hibernate不兼容问题。
JBoss5.1中内置了hibernate,以前4.x的时候还是在server/default/lib里,但在JBoss5.1的时候已经升级到了common/lib下面。4.x时我直接删掉hibernate等的jar就可以了,但5.1不行,否则会抛很多错误。只能一步步解决。
我首先碰到的问题是hibernate配置文件名字错误,可笑是吗?在JBoss5.1下会首先搜索*-hibernate.xml的文件。如果有就当成jboss hibernate配置的文件,进行加载。而我的项目里的spring下的hibernate配置文件正使用了该结尾,可想而知了。抛出 is in error due to the following reason(s): java.lang.ClassCastException错误。找了好久才找到原因。
改一下名字就可以了,如
*-forhibernate.xml
之后是ClassLoad问题。解决上一个问题后,碰到如下异常。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lookupDao' defined in ServletContext resource
[/WEB-INF/applicationContext-forhibernate.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory';
nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'sessionFactory' defined in ServletContext resource
[/WEB-INF/applicationContext-forhibernate.xml]: Invocation of init method failed;
nested exception is java.lang.ClassCastException:
org.hibernate.validator.event.ValidateEventListener cannot be cast to org.hibernate.event.PreInsertEventListener
Caused by:
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'sessionFactory' defined in ServletContext resource
[/WEB-INF/applicationContext-forhibernate.xml]: Invocation of init method failed;
nested exception is java.lang.ClassCastException:
org.hibernate.validator.event.ValidateEventListener cannot be cast to org.hibernate.event.PreInsertEventListener
Caused by:
java.lang.ClassCastException: org.hibernate.validator.event.ValidateEventListener cannot be cast to org.hibernate.event.PreInsertEventListener
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:819)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:805)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:745)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:134)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1202)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1172)
这个问题同样很诡异。最后发现是,原因出在Jboss希望大家可以共用自己容器下面的jar,但是如果版本相同的时候还好,但如果版本不一致,就见鬼了。曾经试着整理jar包试其跟Jboss一样,后来才发现是无解的。回到找配置的路上。。。。
花了好多天,找了好多论坛,总算在Jboss论坛下找到了说明,也是我以前用Jboss少,现在贴出这个地址来。
上面详细说明了问题的解决方法。
http://www.jboss.org/community/wiki/ClassLoadingConfiguration
终结一下就是在WEB-INF下面添加一个叫jboss-web.xml的文件,之后使用在里面写上
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN"
"http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd">
<jboss-web>
<class-loading java2ClassLoadingCompliance='true'>
<loader-repository>
com.example:archive=unique-archive-name
<loader-repository-config>
java2ParentDelegaton=true
</loader-repository-config>
</loader-repository>
</class-loading>
</jboss-web>
就可以了,这样就不会使用容器的jar了。
二、web下加载配置文件错误。
这个是个小问题就是class.getClassLoader().getResource("/").getPath()无发在jboss5.1下取到目录,而tomcat下跑的很正常。也应该算是一个Jboss的一个bug。
改正方式使用context.getRealPath("/")取出
。
三、ActiveMQ的包放进去会抛异常,应该是我没有使用jboss配置JMS的原因,暂时我先给移除了。等以后会配了在补篇文章
。
终结:
虽然解决了,但总觉得容器迁移很痛苦。明明跑的很好的程序,但还了容器,就跑不了了。很郁闷,解决起来也不好找问题。不能希望容器改变,还是希望自己变的更强些吧。
分享到:
相关推荐
java项目tomcat迁移到jboss 出现的问题
如何将代码从Tomcat迁移到JBoss
J2EE Tutorial Java Pet Store Java Adventure Builder 钟情JBoss 4.x 全书内容安排 1 安装JBoss 4.x 2 安装JBoss-IDE 1.4.0 3 基于JBoss 4.x的JSF应用开发 4 基于JBoss 4.x的JMS应用...
web工程从TOMCAT移植到JBOSS中
JBOSS集群.JBOSS集群.JBOSS集群.JBOSS集群.JBOSS集群.JBOSS集群.
java服务器配置tomcat,resin,jboss借鉴.pdf
java服务器配置tomcat,resin,jboss归纳.pdf
tomcat 和jboss 的区别基于Tomcat内核基于Tomcat内核的JBoss在J2EE应用服务器领域已成为发展最为迅速的应用服务器Tomcat的区别又在哪里
jboss4.2.2.GA java开发的好帮手
基于JBoss 4.x的J2EE 1.4应用 开发指南
JBOSS 5.0.0.GA1 安装 部署 手册
java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object; 错误解决办法
DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd"> <jboss-web> <!-- For load class independently --> ...
使用eclipse通过jboss开发简单的ejb应用(jboss7.x & ejb3.x),包含server和client。
jboss-5.0.0.GA.zip 分为2卷: jboss5.0.part1.rar jboss5.0.part2.rar
JBoss文档.rar
jdk1.6与jboss5.x冲突问题的解决方法
jboss-4.0.5.GA.zip
jobss4.0 和tomcat5.5的数据源配置,是我自己配置过程中写下来的,在网上看了好多,总算配成功了,希望大家喜欢.