h tp://yourenyouyu2008.iteye.com/blog/779707看到一些ClassNoFindException ,ClassCastException等異常首先應該想到是否是ClassLoader引發的。html
一樣的一個war在tomcat,jboss,weblogic等環境下不必定都能正常運行,是因爲這些服務器的ClassLoader策略不徹底同樣,對包衝突的解決辦法不同。最好的辦法是引入maven的包管理機制,根據不一樣的服務器生成不一樣的war。java
Caused by: java.lang.ClassCastException: org.hibernate.ejb.HibernatePersistence cannot be cast to javax.persistence.spi.PersistenceProvider
at javax.persistence.Persistence.findAllProviders(Persistence.java:112)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
at org.jboss.seam.persistence.EntityManagerFactory.createEntityManagerFactory(EntityManagerFactory.java:85)
at org.jboss.seam.persistence.EntityManagerFactory.startup(EntityManagerFactory.java:50)web
這是一個基於jpa的web項目,一樣的war在tomcat下運行是沒有問題的,但在jboss下卻包上面的異常。這說明正常狀況下HibernatePersistence 應該能轉換成PersistenceProvider,不能轉換的緣由就是這兩個類是由不一樣的加載器加載的。搜索jboss classloader查找解決方案,設置server\default\deploy\JBoss-web.deploy\META-INF\JBoss-service.xml 文件中的<attribute name="UseJBossWebLoader">true</attribute>.api
http://www.blogjava.net/agapple/archive/2008/10/23/236142.htmltomcat
有個初學jsf的同事在tomcat下運行jsf的官方demo,總時報java.lang.ClassNotFoundException: javax.el.ELResolver異常,而一樣的tomcat,demo在別人的電腦上沒有一點問題,百思不得其解時從網上搜到了下面的信息:若是把jsp-api.jar 或者servlet-api.jar放入到了 jdk /jre/lib/ext包下面就會出現 java.lang.ClassNotFoundException: javax.el.ELResolver異常,解決方法,在jre/lib/ext包下面刪除那兩個包就好了。原文連接http://hi.baidu.com/java_hl/blog/item/cd93202a4c9a154a4ec22660.html。服務器
一檢查她的jdk/jre/lib/ext包下確實有jsp-api.jar和servlet-api.jar兩個jar,刪除後一切正常。app
按照往常的經驗是不會將jsp-api.jar和servlet-api.jar放到jdk/jre/lib/ext下面的,她說創建的項目裏的import javax.servlet老是報錯,網上搜索到把jsp-api.jar和servlet-api.jar放到jdk/jre/lib/ext下面,進一步發現她創建的不是web項目,而是普通的maven項目(對初學者來講太複雜了)。jsp
java.lang.IllegalAccessError: tried to access class javassist.bytecode.StackMapTable$Writer from class org.jboss.seam.util.ProxyFactorymaven
javasist版本衝突,seam使用了低版本的javasist,而運行時使用了高版本的javasistide