解決WebLogic12C與Hibernate3.3的Antlr包衝突問題

環境配置:weblogic12C     Struts2.1.8+Spring2.5+Hibernate 3.3 

問題描述:項目在tomcat7下運行正常,但部署在WebLogic12C下運行時,就有如下異常: 

ClassNotFoundException: org.hibernate.hql.ast.HqlToken

語法解析器異常,提示找不到指定的Class



產生以上問題的原因是WebLogic爲了去分析EJBQL,帶有自己的Antlr.jar包,與項目中Hibernate的Antlr.jar包有衝突。



解決以上問題思路是讓JVM優先加載web項目的antlr.jar包,而不是weblogic自帶的較低版本的antlr.jar包。


一、如果是在MyEclipse中啓動:

在MyEclipse的Preferences->Server->WebLogic->WebLogic10.x配置

展開Paths,在Prepend to classPath,將web項目lib目錄下的antlr-2.7.6.jar包加入:


通過上面配置,啓動WebLogic,問題解決。




二、如果是直接啓動WebLogic部署,只需要在項目的WEB-INF/WebLogic.xml文件中添加

<prefer-web-inf-classes>true</prefer-web-inf-classes>
配置:

weblogic.xml 

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

	<jsp-descriptor>
		<keepgenerated>false</keepgenerated>
		<!-- 
		page-check-seconds默認值是1,表示每隔1秒對JSP頁面進行檢查,檢查JSP頁面是否被修改、是否需要重新編譯。
		系統上線後會影響性能,需要對該默認值修改爲-1,表示永不檢查
 		-->
		<page-check-seconds>-1</page-check-seconds>
		<verbose>true</verbose>
		<debug>true</debug>
	</jsp-descriptor>

	<container-descriptor>
		<!-- 指示優先從部署項目的WEB-INF/lib目錄下加載jar包,解決WegLogic與hibernate包衝突問題 -->
		<prefer-web-inf-classes>true</prefer-web-inf-classes>
		
		<!-- servlet-reload-check-secs的默認值也是1,每隔1秒檢查servlet是否被修改並需要重新編譯,
		很影響性能。這裏建議修改爲-1,表示永不檢查
		-->
		<servlet-reload-check-secs>-1</servlet-reload-check-secs>
	</container-descriptor>
	
	<context-root>/</context-root>
</weblogic-web-app>


問題得到解決。



用第二種辦法,可以代替第一種。





發佈了53 篇原創文章 · 獲贊 2 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章