旧问题重谈:Hibernate3与weblogic8的问题:org.hibernate.hql.ast.HqlToken

      最近兄弟的项目全省推广了,帮着改来着,jdk1.6向那全省的破服务器中的jdk1.4降,使用的weblogic8.x,所以遇到几年前大家都遇到的问题,可能现在最新的weblogic已解决这些问题(希望如此)。下面的方法为本人所找的,但都试验过!

      将使用Hibernate3.X的Web应用发布到Weblogic8.X上, 一旦出现访问数据库的操作就会出错, 提示CharScanner; panic: ClassNotFoundException: org.hibernate.hql.ast.HqlToken, 而且Weblogic进程会被自动关闭。

      经上网查证, 原因是: 在hibernate3中需要用到antlr.2.7.X.jar,然而这个包在weblogic.jar中已经包含了antrl类库,就会产生一些类加载的错误,无法找到在war或者ear中的hibernate3.jar。而出现这个错误之后,antlr会调用System.exit(),这样weblogic就会中止服务。

      历史解决办法:

      (I)选择Hibernate2.1的查询翻译器
       hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory

       弊端:不能执行如update、sum(*)/sum(*)等语句。在开发大型项目中不实际!

     

      (II)选择Hibernate3.0的查询翻译器:
       hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory (仅修改这是不够的)

       继续:(a)将antlr-2.7.X.jar到Weblogic的pre_Classpath :用WinRar或Winzip打开C(请选择你自己的安装目录):/bea/weblogic81/server/lib/weblogic.jar 删除里面的antlr目录, 然后再antlr-2.7.X.jar放在weblogic.jar的同一目录(注:替换之后没做做过严格测试,尚不知是否有后遗症) ,本人测试到的后遗症是:以前编译过的函数,查询语句都可以用的,没编译过的查询语句,它不再执行!

               (b)修改% mydomain% / startWebLogic.sh: 
       在set CLASSPATH之前加上下面一句:
         set PRE_CLASSPATH=%WL_HOME%/server/lib/antlr-2.7.5H3.jar;
       在set CLASSPATH之后加上下面一句:
        set CLASSPATH=%PRE_CLASSPATH%;%CLASSPATH%
       一切OK!

       弊端:每个版本的配置文件都不一样,我用的配置文件就和这不一样,所以我试了好几种写法,都以失败而告终!有成功的,请告我声,在此先谢谢了!

     (III)在自己的网站中WEB-INF中新建weblogic.xml文件,让weblogic先识别该网站下的antlr.jar即可。

       <!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN""http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">

      <weblogic-web-app>
       <jsp-descriptor>
       <jsp-param>
       <param-name>pageCheckSeconds</param-name>
       <param-value>0</param-value>
       </jsp-param>
       <jsp-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
       </jsp-param>
       </jsp-descriptor>
       <container-descriptor><!-- using web based class load order -->
       <prefer-web-inf-classes>true</prefer-web-inf-classes>
       </container-descriptor>
      </weblogic-web-app>

       弊端:这个方法我试过了,但别的*.xml文件读取就成问题了,不知道大家有没有遇到!

       (IV)最简单的:大家在用Myeclipse(eclipse)时不是要配服务器的,在那配服务器的下面有个选项Paths,选择Paths,选其中的Perpend to classpath,选Add JAR/ZIP,好了选择你要加的antlr.2.7.X.jar,加进去,重新编译,一切ok!

       简单、方便,感谢eclipse吧,方便了我们的开发!但本人还未把项目部到服务器上,不知道到时直接用weblogic直接启动会不会出现问题,还不清楚,希望不要再出现问题了!我都受不了了!期待吧。。。(有问题,本人会继续补上解决办法

       写这博客只是总结,没个人创新,只是方便大家不要走太多的弯路!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章