• 将项目从tomcat 迁移到JBoss5.0


    http://java-boy.iteye.com/blog/531411从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)  
     

         这个问题同样很诡异。最后发现是,原因出在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>  

     就可以了,这样就不会使用容器的jar了。

    二、web下加载配置文件错误。

         这个是个小问题就是class.getClassLoader().getResource("/").getPath()无发在jboss5.1下取到目录,而tomcat下跑的很正常。也应该算是一个Jboss的一个bug。 改正方式使用context.getRealPath("/")取出 。

    三、ActiveMQ的包放进去会抛异常,应该是我没有使用jboss配置JMS的原因,暂时我先给移除了。等以后会配了在补篇文章 。

    终结:

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

     
     
    参考文章:
  • 相关阅读:
    机器学习理论基础
    Python 2/3 安装与运行环境设置
    connect/express 的参考
    Koa2 的安装运行记录(二)
    iOS如何才能在招聘中表现得靠谱?
    游戏本地化不止是翻译,还有……
    IOS 判断当前UIViewController 是否正在显示
    获取iOS应用中当前处于Activity状态的ViewController
    APP UI设计趋势:为好设计而动
    实现ios后台缩略图模糊的一种方法
  • 原文地址:https://www.cnblogs.com/svennee/p/4075536.html
Copyright © 2020-2023  润新知