大家好,我是一直默默努力的大龄程序媛大丫姨,今天协助客户发布一个2015年的hibernate的老工程遇到了一个问题,在Weblogic中部署Hibernate的项目,启动WebLogic时没有问题,但是点击某一个菜单界面提示:“ClassNotFoundException: org.hibernate.hql.ast.HqlToken”,刚开始没有上网查原因,一直以为war包太旧的问题,后面从其他运行没问题的单位把包拷贝过来修改配置文件后继续报错,后面才在网上查原因,但有的只写了下面步骤的第一步,参照执行后问题一直都没有解决,但是知道是weblogic10和hibernate3的冲突问题,于是上网查“weblogic10和hibernate3的冲突问题”。
错误原因:
在hibernate3中需要用到antlr,然而这个包在weblogic.jar中已经包含了antrl类库,就会产生一些类加载的错误,无法找到在war或者ear中的hibernate3.jar。
出现这个错误之后,antlr会调用System.exit(),这样weblogic就会中止服务。
解决办法:三个步骤
1:在用户工程代码web-inf下建立xml文件:weblogic.xml(此步可省,我没有加)
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>
2:拷贝用户工程里的antlr-2.7.6rc1.jar到weblogic10目录:D:/bea/wlserver_10.0/server/lib
3:改造当前weblogic用户的startWebLogic.cmd(我的之前应该是有人试着解决过,是加好的)
set PRE_CLASSPATH=%WL_HOME%/server/lib/antlr-2.7.6rc1.jar
set CLASSPATH=%SAVE_CLASSPATH%—————————原来的保留
set CLASSPATH=%PRE_CLASSPATH%;%CLASSPATH%
————————————————
参考链接:https://blog.csdn.net/shimiso/article/details/6045160