Jboss從4到5的版本的變化是比較大的,主要是它對包的衝突限制非常嚴格,在4版本中基本上不是非常嚴格,如果有包衝突,會自動選擇,但在5中回出非常多的轉換異常錯誤,導致項目無法發佈,或是發佈完成後無法訪問,現把這次升級中遇到的錯誤及解決辦法記錄如下.
1 The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
將工程路徑下的WebRoot下的WEB-INF下的lib裏的jsp-api-2.0.jar,servlet-api-2.4.jar刪除就OK 了,應該是工程裏自帶的這兩個文件和TOMCAT裏的文件衝突導致的ok!
2 org.jboss.util.NestedSQLException: Could not create connection; - nested throwable: (java.lang.NullPointerException); - nested throwable: (org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (java.lang.NullPointerException))
這個是由於配置了數據庫的連接池,但是lib中沒有相應的連接數據庫的驅動,無法產生連接.
3
1,Jboss 在啓動時報Failed to create a new SAX parser 錯誤。
2,Jboss 在啓動時報(java.lang.ClassNotFoundException: JACC:Error PolicyConfigurationFactory : cannot find class : null)
解決方案
1,刪除 xerces*.jar 和xml-apis*.jar,解決XML 解析器實現衝突。
2,刪除jaas.jar and jcr*.jar,解決jaas 實現衝突。
4
java.lang.ClassCastException: gnu.xml.aelfred2.JAXPFactory cannot be cast to javax.xml.parsers.SAXParserFactory
原因爲:
項目中的gnujaxp.jar和服務器上的java xml解析器衝突.
5
Getting java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to javax.servlet.http.HttpServletRequest
這個是由於項目中包含的Servlet.jar和服務器上的jar發生了衝突.
6 JBoss是自帶Hibernate的絕大多數庫文件的,所以IDE引入的Hibernate相關庫絕對不能隨着項目打包,做法同上,把“package”的勾選去掉即可。我曾被這個問題困擾,因爲將Hibernate打進war包的結果就是JBoss將在程序運行的時候報出下面的錯誤信息:
org.jboss.resource.adapter.jdbc.WrapperDataSource cannot be cast to javax.sql.DataSource
這個問題非常的搞,即使把hibernate等的包都搞掉可能還會出問題,我在這邊被搞了好久,還好解決了,
總結一下
1 可能是hibernate包衝突問題.
2 可能是項目中的數據庫驅動和服務器上數據庫驅動重複,導致衝突
3 這個很隱蔽,可能有的包中含有Javax.sql.DataSource,也會衝突,我查到的就有一個,class12.jar
總之來說Jboss5是一個很讓人頭疼的版本.