因客户需求,将原来在tomcat 6的 struts2+hibernate3+spring2.5下的应用移植到weblogic10.3上,在运行
weblogic10.3时发现,原来在tomcat6运行妥妥的应用不好用了,在开发工具中发现抛异常:
org.springframework.orm.hibernate3.HibernateQueryException: ClassNotFoundException:
org.hibernate.hql.ast.HqlToken
由是在网上开始海找试过好多也走了不少弯路,终于解决了。
我的解决方法是:
问题就是jar包冲突hibernate3需要antlr-2.7.6.jar的支持,而在weblogic10.3我的安装目录
“D:\bea\modules”下有两个jar和工程里的jar(antlr-2.7.6.jar)包冲突将weblogic10.3中jar包删除
(com.bea.core.antlr_2.7.7.jar、com.bea.core.antlr.runtime_2.7.7.jar)就可以了。
因每个人的问题和使用的版本不同解决方法也有所不同,所以把网上其它解决方法也整理出来了,供大家参考。
解决方法一:
如果你使用的是hibernate没用spring那你需要在hibernate.properties中设置
否则在spring中设置hibernate查询翻译器属性
<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”下
setDomainEnv.cmd或startWebLogic.cmd文件打开找到set CLASSPATH上面加
set PRE_CLASSPATH=% DOMAIN_HOME%\lib\antlr-2.7.6.jar;
下而加set CLASSPATH=%PRE_CLASSPATH%;%SAVE_CLASSPATH%ATH%
如果以上还没有解决问题:
原因如下:
您用MyEclipse启动 weblogic 需要对myEclipese 进行 夹包添加。
添加步骤如下:
如果你是通过eclipse启动weblogic的,
那么依次点击windows-preferences-myeclipse workbench-servers-weblogic-weblogic10.x-path,在prepend to classpath选项中,
把hibernate要用到的包antlr.jar添加到weblogic的classpath中。
这样在weblogic便可以通过myeclipse正常启动,以上提到的问题解决。