当前位置: 代码迷 >> Web前端 >> weblogic10.3 org.hibernate.hql.ast.HqlToken报错有关问题
  详细解决方案

weblogic10.3 org.hibernate.hql.ast.HqlToken报错有关问题

热度:869   发布时间:2012-09-27 11:11:17.0
weblogic10.3 org.hibernate.hql.ast.HqlToken报错问题
tomcat 6的 struts2+hibernate3+spring2.5下的应用移植到weblogic10.3上,在运行

weblogic10.3时发现,原来在tomcat6运行妥妥的应用不好用了,在开发工具中发现抛异常:

org.springframework.orm.hibernate3.HibernateQueryException: ClassNotFoundException:

org.hibernate.hql.ast.HqlToken





原因: Hibernate3.0 采用新的基于ANTLR的HQL/SQL查询翻译器,在Hibernate的配置文件中,hibernate.query.factory_class属性用来选择查询翻译器。 (1)选择Hibernate3.0的查询翻译器: hibernate.query.factory_class= org.hibernate.hql.ast.ASTQueryTranslatorFactory (2)选择Hibernate2.1的查询翻译器 hibernate.query.factory_class= org.hibernate.hql.classic.ClassicQueryTranslatorFactory 为了使用3.0的批量更新和删除功能,只能选择(1)否则不能解释批量更新的语句,当使用的时候出现了不支持条件输入中文的情况。选择(2)可以支持输入中文,但没法解释批量更新语句了 在hibernate3中需要用到antlr,然而这个包在weblogic.jar中已经包含了antrl类库,就会产生一些类加载的错误,无法找到在war或者ear中的hibernate3.jar。 出现这个错误之后,antlr会调用System.exit(),这样weblogic就会中止服务。 解决方法一:是在hibernate.properties文件中增加属性:hibernate.query.factory_class,属性的值是org.hibernate.hql.classic.ClassicQueryTranslatorFactory,这样就可以解决问题了。

  <!-- <prop key="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</prop>    --><prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>但是部分功能会有问题,譬如 但本系在批量删除和更新会有问题,本系统不采用 



解决方法二: 设置在“D:/bea/wlserver_10.3/server/lib/consoleapp/webapp/WEB-INF”下的weblogic.xml文件 weblogic8.0解决这个问题是改更weblogic.xml把一个属性更为true <container-descriptor> ... <prefer-web-inf-classes>true</prefer-web-inf-classes> ... </container-descriptor>



解决方法三: 设置我的目录“D:/bea/wlserver_10.3/server/lib”放入antlr-2.7.6.jar且在weblogic.jar前面 设置我的目录“D:/bea/user_projects/domains/base_domain/bin”下





我 按照上面的方法都不太可行

我的解决方法是:

问题就是jar包冲突hibernate3需要antlr-2.7.6.jar的支持,而在weblogic10.3我的安装目录

“D:/bea/modules”下有两个jar (com.bea.core.antlr_2.7.7.jar、com.bea.core.antlr.runtime_2.7.7.jar)和工程里的jar(antlr-2.7.6.jar)包冲突

将com.bea.core.antlr.runtime_2.7.7.jar删除,把antlr-2.7.6.jar 放到D:/bea/modules下

在web-inf之下建立weblogic.xml


<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "weblogic810-web-jar.dtd">  <weblogic-web-app>  <container-descriptor>   <prefer-web-inf-classes>true</prefer-web-inf-classes> </container-descriptor> </weblogic-web-app>


setDomainEnv.cmd或startWebLogic.cmd文件打开找到set CLASSPATH上面加

set PRE_CLASSPATH=% DOMAIN_HOME%/lib/antlr-2.7.6.jar;

下而加set CLASSPATH=%PRE_CLASSPATH%;%SAVE_CLASSPATH%ATH%

  相关解决方案