weblogic部署war包遇到的问题

最近接手项目需要用到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文件,文件中写入如下代码:
   <?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>
说明: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下。

   

你可能感兴趣的:(tomcat,maven,weblogic)