`

Tomcat 迁移到 Jboss5.1日志

阅读更多

从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问题。解决上一个问题后,碰到如下异常。

 

Java代码 复制代码
  1. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lookupDao' defined in ServletContext resource   
  2.  [/WEB-INF/applicationContext-forhibernate.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory';   
  3.  nested exception is org.springframework.beans.factory.BeanCreationException:    
  4.   
  5. Error creating bean with name 'sessionFactory' defined in ServletContext resource    
  6. [/WEB-INF/applicationContext-forhibernate.xml]: Invocation of init method failed;   
  7.  nested exception is java.lang.ClassCastException:   
  8.  org.hibernate.validator.event.ValidateEventListener cannot be cast to org.hibernate.event.PreInsertEventListener   
  9. Caused by:    
  10. org.springframework.beans.factory.BeanCreationException:   
  11.  Error creating bean with name 'sessionFactory' defined in ServletContext resource    
  12. [/WEB-INF/applicationContext-forhibernate.xml]: Invocation of init method failed;   
  13.  nested exception is java.lang.ClassCastException:   
  14.  org.hibernate.validator.event.ValidateEventListener cannot be cast to org.hibernate.event.PreInsertEventListener   
  15. Caused by:    
  16. java.lang.ClassCastException: org.hibernate.validator.event.ValidateEventListener cannot be cast to org.hibernate.event.PreInsertEventListener   
  17.     at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:819)   
  18.     at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:805)   
  19.     at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:745)   
  20.     at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:134)   
  21.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1202)   
  22.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1172)  
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的文件,之后使用在里面写上

 

Xml代码 复制代码
  1. <!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN"   
  2. "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd">  
  3. <jboss-web>  
  4. <class-loading java2ClassLoadingCompliance='true'>  
  5.        <loader-repository>  
  6.            com.example:archive=unique-archive-name   
  7.            <loader-repository-config>  
  8.                java2ParentDelegaton=true  
  9.            </loader-repository-config>  
  10.        </loader-repository>  
  11.   </class-loading>  
  12. </jboss-web>  
<!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

    Java 项目从 Tomcat 迁移到 JBoss 的解决方案 在 Java 项目中,迁移到 JBoss 可能会出现各种问题,例如版本兼容问题、设置问题等。本文将介绍如何解决这些问题,包括如何配置 JBoss,使得 Spring 项目能够正常运行...

    基于JBoss 4.x的J2EE 1.4应用开发指南

    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应用...

    TOMCAT移植到JBOSS

    移植一个Web工程从TOMCAT到JBOSS的过程,实际上是对工程的部署环境、配置以及依赖关系进行调整,以适应新的应用服务器环境。具体步骤如下: - **更改部署包格式**:将部署在TOMCAT中的工程文件夹(test)名称更改为...

    apache-tomcat-7.0.70.tar.gz

    尽管Tomcat不是完整的Java EE应用服务器,但它与Java EE的其他组件(如EJB)可以通过与其他服务器(如JBoss或Glassfish)集成来支持。 **Linux系统**: Linux是一种自由和开放源代码的操作系统,广泛应用于服务器...

    apache-tomcat-9.0.44.tar.gz

    2. 配置环境变量:将Tomcat的bin目录添加到PATH环境变量中,以便于在任何地方执行Tomcat命令。 3. 启动Tomcat:在Tomcat的bin目录下运行`./catalina.sh start`(对于Linux/Unix)或`startup.bat`(对于Windows)启动...

    apache-tomcat-8.5.81.tar.gz

    10. **与其他Java EE组件的集成**: 虽然Tomcat主要是一个Servlet和JSP容器,但也可以与其他Java EE组件(如EJB、JMS等)集成,通过使用第三方库或容器(如Apache Geronimo或Red Hat JBoss AS)。 总的来说,"apache...

    apache-tomcat-9.0.53.tar.gz

    1. **Tomcat简介** - **功能**:Tomcat主要作为Servlet容器,但也可以处理JSP和WebSocket应用。它不包含完整的Java EE功能,如ejb、JMS等,但可以通过与其他开源软件(如JBoss或GlassFish)结合使用来实现这些功能...

    apache-tomcat-9.0.8.tar.gz

    1. **Tomcat概述** Tomcat是Apache软件基金会Jakarta项目的一个核心组件,它遵循Java EE规范,提供了对Servlet和JSP的支持。作为一个轻量级应用服务器,Tomcat因其高效、稳定和易用性而广受欢迎。 2. **版本号...

    jboss-4.0.5.GA.zip

    1. **Java EE 5支持**:JBoss 4.0.x系列是基于Java EE 5标准的,提供了诸如EJB 3.0、JPA(Java Persistence API)、JSF(JavaServer Faces)、JMS(Java Message Service)等组件的支持,使得开发企业级应用变得更加...

    最新版linux apache-tomcat-9.0.36.tar.gz

    - Tomcat常与其他Java应用服务器如JBoss、GlassFish等集成,以实现更复杂的企业级应用架构。 - 它还可以与Apache HTTP Server通过mod_jk或mod_proxy模块进行反向代理,提升性能和负载均衡能力。 总结来说,Apache...

    apache-tomcat-7.0.91.tar.gz

    Apache Tomcat是一个开源的软件应用服务器,主要用于运行Java Servlet和JavaServer Pages...Tomcat与其它Java应用服务器(如JBoss、WebLogic)相比,由于其轻量级和易于管理的特点,深受小型项目和开发团队的喜爱。

    tomcat jboss数据源配置.rar

    1. 添加Oracle JDBC驱动:下载ojdbc.jar文件并将其放在Tomcat的lib目录下,确保Tomcat能访问到Oracle的驱动。 2. 编辑conf/server.xml文件,添加一个Resource元素来定义数据源: ```xml type="javax.sql....

    apache-tomcat-8.5.92.tar.gz

    此外,Tomcat还可以与其他应用服务器(如JBoss、WebLogic)一起工作,实现混合环境的部署。 总之,Apache Tomcat 8.5.92作为一个成熟的Java应用服务器,不仅提供了稳定、高效的运行环境,还允许开发者通过灵活的...

    apache-tomcat-8.0.28.tar.gz

    与更全面的Java EE应用服务器如JBoss或GlassFish相比,Tomcat只包含了Servlet和JSP引擎,不包含其他如EJB、JMS等企业级服务。但这并不妨碍开发者使用开源库和服务来扩展其功能,使其能够支持更复杂的Java应用。 在...

    apache-tomcat-8.5.16.tar.gz

    1. **Tomcat的功能** Apache Tomcat是一个实现了Java Servlet和Java EE Web容器规范的轻量级应用服务器。它能够处理HTTP协议,为基于Java的Web应用程序提供服务。Tomcat 8.5.16是8.5.x系列的一个稳定版本,它支持...

    apache-tomcat-8.5.72.rar

    1. **bin** 目录:包含了启动和停止Tomcat的脚本以及一些管理工具。 2. **conf** 目录:存储服务器的配置文件,如server.xml、web.xml等。 3. **lib** 目录:存放Tomcat运行时需要的JAR文件,包括Servlet和JSP的相关...

    tomcat-and-jboss.rar_jboss_tomcat

    1. **Tomcat**:Tomcat是一个开源的Servlet容器,实现了Java Servlet和JavaServer Pages规范。它轻量级、易于部署,适用于小型项目和快速开发。Tomcat不提供完整的J2EE支持,例如EJB(Enterprise JavaBeans)、JMS...

    java服务器配置tomcat,resin,jboss借鉴.pdf

    3. 修改端口:如果要修改端口号,可以修改 D:\jboss\server\default\deploy\jbossweb-tomcat55.sar 下的 server.xml 文件,找到 ${jboss.bind.address}".../&gt;,将 8080 修改成想要的端口号。 4. 配置虚拟目录:将...

    jboss4.2.2.GA

    jboss4.2.2.GA java开发的好帮手

Global site tag (gtag.js) - Google Analytics