最近接手项目需要用到weblogic 10.3.6 ,于是学习了一下。整理遇到的几个问题,该war包在tomcat中完美运行,但在weblogic的错误层出不穷:
项目使用maven架构的spring mvc、hibernate、spring。
1、程序启动的时候报 java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory
在程序包lib中加入:juli-6.0.35.jar
2、Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
这是weblogic的jar包和程序内部jar包冲突问题。
网上有人说:把hibernate-jpa-2.0-api-1.0.0.Final.jar放到D:\Program Files\weblogic\jdk160_05\jre\lib\ext (但我这里不行)
将 下的删除,下载javax.persistence.jar 替换成目录下的。
3、Hibernate3中hibernate.query.factory_class的默认值为org.hibernate.hql.ast.ASTQueryTranslatorFactory,
在WebLogic下系统运行时会抛出org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken异常。
这个问题网上说的很多,解决方法也各式各样,其实很简单,Weblogic系统默认加载EJB-QL parser,
存在重名类,所以使用时会出现ClassNotFoundException。
解决办法1:在WEB-INF目录下建一个weblogic.xml文件,文件中写入如下代码:
true
说明:prefer-web-inf-classes=true是WebLogic's classloader在有重名类时,优先加载Web应用中WEB-INF内的类。
但此方法会导致Error processing remote invocation: java.lang.LinkageError: loader constraint violation: loader (instance of weblogic/utils/classloaders/Change
AwareClassLoader) previously initiated loading for a different type with name "javax/xml/namespace/QName" 不建议使用。
解决办法2:
第一步: 修改启动脚本 D:/oracle/Middleware/user_projects/domains/base_domain/bin/startWebLogic.cmd
找到set CLASSPATH=%SAVE_CLASSPATH%,在后面加入
set PRE_CLASSPATH=%WL_HOME%/server/lib/antlr-2.7.6.jar;
set CLASSPATH=%PRE_CLASSPATH%;%CLASSPATH%
第二步:antlr-2.7.6.jar包 需要拷贝到D:/oracle/Middleware/wlserver_10.3/server/lib下。