1 ClassNotFoundException: org.hibernate.hql.ast.HqlToken。此问题属于Weblogic8.1.1与hibernate3兼容上的问题。原因是: 在hibernate3中需要用到antlr.jar,然而这个包在weblogic.jar中已经包含了antrl类库(而且此jar包版本比较低),weblogic启动时默认加载了自己低版本的antrl.jar,导致hibernate无法正常使用。解决办法是下载一个高版本的antlr,我用的是antlr-2.7.5.jar(本人开始曾下载antlr-2.7.5.jar,后来发现无用,所以一定要注意版本号,没试3.X好不好用),替换到${WL_HOME}/server/lib下,
修改startWeblogic.cmd文件
@ REM Set SERVER_NAME to the name of the server you wish to start up.
set SERVER_NAME = myserver
set PRE_CLASSPATH=%WL_HOME%/server/lib/antlr.jar;% WL_HOME%/server/lib/ant/ant.jar
set CLASSPATH = %WEBLOGIC_CLASSPATH% ; %POINTBASE_CLASSPATH% ; %JAVA_HOME% / jre / lib / rt . jar ; %WL_HOME% / server / lib / webservices . jar ; %CLASSPATH%
set CLASSPATH = %PRE_CLASSPATH% ; %CLASSPATH%
@ REM Call WebLogic Server
在上面的代码中
set PRE_CLASSPATH=%WL_HOME%/server/lib/antlr.jar
和
set CLASSPATH=%PRE_CLASSPATH%;%CLASSPATH%
为新增的,原文件并无此配置。
保存即可,问题解决。
2 java.lang.IllegalAccessError: tried to access field org.apache.tools.zip.ZipOutputStream.EOCD_SIG from class org.apache.tools.zip.ZipFile
原因:系统用到解压缩zip格式的压缩文件,我使用的是apache.tools里面的zip处理类,在tomcat下运行没有任何问题,在weblogic8.1.1下就不行了。会不会又是因为jar包太旧的原因呢?随后的查找告诉我我的直觉是对的,在${WL_HOME}/server/lib/ant目录下有一个同样的ant.jar( 版本太低),导致解压缩过程无法正常运行。找到了原因所在,就很好解决了。跟上面类似,我用我项目里的ant.jar替换到${WL_HOME}/server/lib/ant目录下,同样修改startWeblogic.cmd文件,(加上上面的修改)修改后的结果如下:
set SERVER_NAME = myserver
set PRE_CLASSPATH = %WL_HOME% / server / lib / antlr . jar ; % WL_HOME% / server / lib / ant / ant . jar
set CLASSPATH = %WEBLOGIC_CLASSPATH% ; %POINTBASE_CLASSPATH% ; %JAVA_HOME% / jre / lib / rt . jar ; %WL_HOME% / server / lib / webservices . jar ; %CLASSPATH%
set CLASSPATH = %PRE_CLASSPATH% ; %CLASSPATH%
@ REM Call WebLogic Server
如此,问题解决。
总结一下:两个问题都是有用Weblogic8.1.1里面相应的jar包版本太低了导致功能无法正常使用,解决办法就是更新相应的jar包,修改启动命令,加载更新的jar包。
可能weblogic10.3.2也有这个问题,采用同样的方法可以解决问题。