`

从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的原因,暂时我先给移除了。等以后会配了在补篇文章

 

 

终结:

     虽然解决了,但总觉得容器迁移很痛苦。明明跑的很好的程序,但还了容器,就跑不了了。很郁闷,解决起来也不好找问题。不能希望容器改变,还是希望自己变的更强些吧。

分享到:
评论

相关推荐

    替换两个文件解决Tomcat6项目移植到JBoss5.1下的Logging异常

    除了加入jboss-web.xml,删除xerces-2.6.2.jar和xml-apis.jar之外, &lt;!... &lt;jboss-web&gt; &lt;!-- For load class ...原因是旧版本的slf4j-api不包含以上方法,附件解压后覆盖jboss5.1GA/common/lib下的同名文件即可

    java项目tomcat迁移到jboss

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

    JBOSS部署相关参考文档

    JBOSS 部署指南是 JBOSS 应用服务器的部署指南,涵盖了从安装 JDK 到配置 JBOSS 的所有步骤。本文档旨在帮助用户快速部署 JBOSS 服务器,並确保服务器的稳定运行。 一、JDK 安装 在 RedHat Enterprise Linux 5.1 ...

    JBoss下载与JBoss安装.doc

    1. JBoss jBPM的安装配置,结合Tomcat 6.0和MySQL 5.1,了解业务流程管理的集成。 2. 如何让Netbeans 6.5支持JBoss 5.0 GA,学习如何在IDE中配置和调试JBoss。 3. JBoss Seam框架下的单元测试,掌握Seam框架的测试...

    pager-taglib 分页扩展实例

    pager-taglib 是个很好的jsp分页标签,使用它结合jstl可以实现灵活的分页导航功能...2.只在jboss5.1内测试通过,注意检查jdbc驱动包等相关依赖,tomcat可能出现缺包等问题,相信入门级别的朋友们应该可以找到解决方案的

    DisplayTag1.2 扩展(自定义分页、排序、导出、页面导航)

    DisplayTag是个很好的jsp标签,目前最新版本为1.2,支持了自定义分页,解决了之前...3.只在jboss5.1内测试通过,注意检查jdbc驱动包等相关依赖,tomcat可能出现缺包等问题,相信入门级别的朋友们应该可以找到解决方案的

    其他类别JdonFramework开源框架 v5.1 Build20071025-jdonframework-5.1.zip

    This version has passed under Tomcat 4.x/5.x JBoss 3.x/JBoss 4.0.0 Weblogic 8.1 when build this project with eclipse or jbuilder. you need modify build.xml , and introduct some libraries: JBoss 3: ...

    电子拍卖系统java 源码

    推荐使用JBoss 5.1 GA系列作为应用服务器。 3. 将auction-ds.xml复制到%JBOSS_HOME%\server\default\deploy目录下,该文件在JBoss服务器上配置数据源 将AuctionQueue-service.xml文件复制到%JBOSS_HOME%\server\...

    Tomcat学习

    Tomcat包含多个容器,从外到内分别是Engine(引擎)、Host(主机)、Context(上下文)和Wrapper(组件)。Engine处理所有请求,Host对应于域名,Context对应Web应用,Wrapper则负责单一Servlet的执行。 1.2 工作...

    Jboss集群配置指南

    2. Tomcat配置 6 3. Jboss配置 6 3.1. 配置Session复制 6 3.2. 配置Clustering services 6 3.3. 配置TreeCache cluster service 7 4. 设置run 参数 7 5. Web client 7 5.1. web.xml 7 5.2. jboss-web.xml 7 5.3. ...

    JBoss Application Server4.2 Getting_Started_Guide

    - **5.1 Web容器**:JBoss Application Server 4.2 内置了Tomcat作为Web容器,负责处理HTTP请求并返回响应。 #### 七、EJB3在JBoss Application Server 4.2中的注意事项 - **2.1 未实现的功能**:尽管JBoss支持大...

    MyEclipse 5.1

    6. **企业级应用服务器支持**:与Tomcat、JBoss、WebLogic、WebSphere等主流应用服务器紧密集成,简化了应用部署和测试过程。 7. **图形化建模工具**:通过UML建模,开发者可以以图形方式设计和理解应用结构,提高...

    myeclipse+tomcat开发环境搭建&tomcat;编程规范

    例如,Websphere 5.0需要JDK 1.3和Servlet 1.3,而5.1版本则升级到了JDK 1.4和Servlet 1.3。 3. **URL中文乱码**:Tomcat可能需要在`server.xml`中配置URL编码,而Websphere默认处理得更好。 了解并遵循这些规范和...

    JBOSS EJB3.0实例教程

    - 将Web应用程序发布到JBoss服务器,并确保它可以访问已部署的EJB组件。 - 通常需要在web.xml文件中配置相关的JNDI查找信息。 **2.5 如何获取最新的内嵌EJB3的JBoss版本** - 访问JBoss官方网站或GitHub仓库查看最新...

    JBoss Seam3

    ##### 5.1 CDI编程模型的增强 - **防止类被处理**:使用`@Veto`和`@Requires`注解来控制哪些类应该被Seam3处理。 - **精确匹配**:`@Exact`注解用于指定精确的匹配条件。 - **客户端注解**:`@Client`注解用于标记...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.1.2. 在Tomcat 服务器上运行示例.......................................................................................................................... 15 1.1.3. 运行测试..............................

    myeclipse中运行java程序操作步骤(1)借鉴.pdf

    Tomcat是Java应用服务器的一种,常用的应用服务器还包括WebLogic、Oracle、WebSphere、Jboss等。Tomcat是一款开源免费的应用服务器,安装非常简单,分为多个版本,也有离线版本(不需要安装,直接解压包即可)。 三...

Global site tag (gtag.js) - Google Analytics