解决weblogic异常ClassCastException, NoSuchMethodError, NoSuchFieldError...

情景

项目在tomcat运行正常,但是部署到weblogic总会报出ClassCastException, NoSuchFieldError, NoSuchMethodError…等等异常。
分析:
此类异常,大多可以归结为类库冲突导致。即weblogic类库已经包含了项目依赖的类库,程序运行时,同个模块的一些类从项目类库中加载,一些类从weblogic类库中加载,两者的类库有差异,当涉及到类型转换,或者方法调用等等逻辑就导致了异常。

解决办法

为了避免上述类冲突情况,weblogic提供了一个机制,允许优先加载项目的类库。
在项目 WEB-INF目录新建 weblogic.xml文件,填写冲突的类包名:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
	<container-descriptor>
		<!-- 优先加载 web-inf 中部分类 -->
		<prefer-application-packages>
        	<package-name>javax.persistence</package-name>
        	<package-name>org.hibernate.jpa.internal</package-name>
			<package-name>org.slf4j</package-name>
			<package-name>javassist</package-name>
		</prefer-application-packages>
	</container-descriptor>
</weblogic-web-app>

排查冲突案例

一个详尽排查 NoSuchMethodError 的案例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章