weblogic 包加载与冲突等问题

问题1(org.apache.commons.lang.ClassUtils.getClass)

weblogic 包加载与冲突等问题

解决办法

在WEB-INF文件夹下,加上weblogic.xml,让WebLogic 10先引用WEB-INF下面的jar,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
    <weblogic-version>10.3.1</weblogic-version>
    <context-root>xxxx_for_weblogic</context-root>
    <container-descriptor>
        <prefer-web-inf-classes>true</prefer-web-inf-classes>
        <show-archived-real-path-enabled>true</show-archived-real-path-enabled>
    </container-descriptor>
</weblogic-web-app>

问题2(java.lang.ClassCastException: **weblogic.xml.jaxp.RegistryDocumentBuilderFactory)

weblogic 包加载与冲突等问题

解决办法

删掉war包中的xml-apis就可以了

问题原因说明

因为我们刚在weblogic.xml里设置了优先加载WEB-INF中的jar,那么要删掉冲突的jar。

The weblogic.xml Web application deployment descriptor contains a <prefer-web-inf-classes> element (sub-element of the <container-descriptor> element). By default, this element is set to false. **Setting this element to true subverts the classloader delegation model so that class definitions from the Web application are loaded in preference to class definitions in higher-level classloaders.** This allows a Web application to use its own version of a third-party class, which might also be part of WebLogic Server. 

**When this setting is enabled in weblogic.xml, the following jars has to be removed from portal WEB-INF/lib** (jars with javax.xml package): 

jaxrpc.jar

stax.jar

wstx.jar

xml-apis.jar


问题三(java.lang.NoSuchMethodError:javax.persistence.OneToMany.orphanRemoval())

weblogic 包加载与冲突等问题

解决办法

把war中的hibernate-jpa-2.0-api-1.0.0.Final.jar删掉。

问题原因说明

war和Weblogic 10本身都有jpa的jar包,冲突。


问题4(**java.lang.NoClassDefFoundError: javax/persistence/Cacheable**)

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/dorado-home/app-context.xml]: Invocation of init method failed; nested exception is **java.lang.NoClassDefFoundError: javax/persistence/Cacheable**
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)

解决办法

将hibernate-jpa-2.0-api-1.0.0.Final.jar放到%WEBLOGIC_HOME%\jdk160_11\jre\lib\ext中,让它在Weblogic 10的JPA jar之前引用。

如果使用的是jrockit,则应该将这个jar放在%WEBLOGIC_HOME%\jrockit_160_05\jre\lib\ext中

问题原因说明

Weblogic 10.3里的jpa是1.0的(%WEBLOGIC_HOME%\modules\javax.persistence_1.0.0.0_1-0-2.jar),而我们使用的是2.0版本的。而JPA 1.0好像不支持缓存,所以,单纯的删除hibernate-jpa-2.0-api-1.0.0.Final.jar是不行的。

问题5(**Cannot resolve reference to bean 'dorado.velocityHelper' while setting bean property 'velocityHelper';**)

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.bstek.dorado.view.resolver.HtmlViewResolver#199d183' defined in class path resource [com/bstek/dorado/view/servlet-context.xml]: **Cannot resolve reference to bean 'dorado.velocityHelper' while setting bean property 'velocityHelper';** nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dorado.velocityHelper': FactoryBean threw exception on object creation; nested exception is **java.lang.NullPointerException**
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)

解决办法

把velocity-tools-2.0.jar删掉

问题6(Bad date header)

java.lang.IllegalArgumentException: Bad date header: 'Mon, 04 Jul 2011 06:33:24 GMT'        at weblogic.servlet.internal.ServletRequestImpl.getDateHeader(ServletRequestImpl.java:983)

解决办法

安装WebLogic 10gR3版本的CR380042_103GA.jar补丁,具体办法:

首先将CR380042_103GA.jar(点击下载)拷贝到WebLogic的domain的lib目录下;
然后修改setDomainEnv.sh/setDomainEnv.bat(前者对应linux系统,后者为windows系统),在最后设置的CLASSPATH中增加,如下:

 

CLASSPATH=.../mydomain/lib/CR380042_103GA.jar;${CLASSPATH} 

相关说明文档参考https://forums.oracle.com/forums/thread.jspa?threadID=705412 


问题7(javassist.util.proxy.ProxyFactory.setUseCache(Z))

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: javassist.util.proxy.ProxyFactory.setUseCache(Z)V
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:839)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)

xwork-core-2.1.6.jar导致的

参考ISSUE: http://www.bsdn.org/projects/dorado7/issue/dorado7-1157

问题8:(weblogic.application.ModuleException)

weblogic.application.ModuleException:
com.ctc.wstx.stax.WstxInputFactory cannot be cast to javax.xml.stream.XMLInputFactory

 

这是因为包冲突了,如果项目的lib里有wstx-asl-xxx.jar,部署之前先从war包里删除这些jar包,再部署就可以了。
注意还要在WEB-INF目录下添加一个weblogic.xml,设置属性优先使用当前应用的包文件。配置内容参考问题1