• classloader常见问题总结


    h tp://yourenyouyu2008.iteye.com/blog/779707看到一些ClassNoFindException ,ClassCastException等异常首先应该想到是不是ClassLoader引起的。

    各服务器的ClassLoader策略不同一致

    同样的一个war在tomcat,jboss,weblogic等环境下不一定都能正常运行,是由于这些服务器的ClassLoader策略不完全一样,对包冲突的解决办法不一样。最好的办法是引入maven的包管理机制,根据不同的服务器生成不同的war。

    java.lang.ClassCastException

    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)

    这是一个基于jpa的web项目,同样的war在tomcat下运行是没有问题的,但在jboss下却包上面的异常。这说明正常情况下HibernatePersistence 应该能转换成PersistenceProvider,不能转换的原因就是这两个类是由不同的加载器加载的。搜索jboss classloader查找解决方案,设置serverdefaultdeployJBoss-web.deployMETA-INFJBoss-service.xml 文件中的<attribute name="UseJBossWebLoader">true</attribute>.

    jboss classloader

    http://www.blogjava.net/agapple/archive/2008/10/23/236142.html

    java.lang.ClassNotFoundException:javax.el.ELResolver

    有个初学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,删除后一切正常。

    按照往常的经验是不会将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项目(对初学者来说太复杂了)。

    常见异常

    java.lang.IllegalAccessError

    java.lang.IllegalAccessError: tried to access class javassist.bytecode.StackMapTable$Writer from class org.jboss.seam.util.ProxyFactory

    javasist版本冲突,seam使用了低版本的javasist,而运行时使用了高版本的javasist

  • 相关阅读:
    Django model中的内嵌类(Class Meta)
    drf框架(二)
    drf框架(一)
    html、CSS 简单回顾
    前端vue框架(五)
    前端vue框架(四)
    前端Vue框架(三)
    前端vue框架(二)
    前端开发Vue框架(二)
    mysql 比较两个日期的时间差
  • 原文地址:https://www.cnblogs.com/svennee/p/4075488.html
Copyright © 2020-2023  润新知