背景
目前做的这个项目应用运行在weblogic服务器上面,weblogic特有的一些机制使得在websphere、tomcat上能够正常运行的应用,不能在weblogic上运行。本文中提到的weblogic10与hibernate3中antlr.jar包冲突问题就是其中的一种。
现象
在使用hibernate3查询数据库的时候,weblogic服务对应的java进程直接退出,后台报错如下:
CharScanner; panic: ClassNotFoundException:org.hibernate.hql.ast.HqlToken
原因
在hibernate3中需要用到antlr.jar,然而这个包在weblogic.jar中已经包含了antrl类库,就会产生一些类加载的错误,无法找到在war或者ear中的hibernate3.jar。而出现这个错误之后,antlr会调用System.exit(),这样weblogic就会中止服务。
解决
在weblogic启动脚本startWeblogic.sh中为CLASSPATH变量指定高版本的antlr类库,比如:
CLASSPATH="/opt/antlr-2.7.7.jar:${CLASSPATH}"
这里antlr类库的路径自己指定。至此问题得到解决。