解決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 的案例

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