2011-11-25 45 views
0

我在我的项目中使用hibernate作为我的数据库。它工作很好,但现在我得到了这个例外。与休眠登录的ASM(<init>(Z))

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V 
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:531) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:332) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 


     cause mère 

    javax.servlet.ServletException: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V 
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:901) 
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:830) 
org.apache.jsp.JSP.session.login_jsp._jspService(login_jsp.java:321) 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:332) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 


    cause mère 

    java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V 
net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:47) 
net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.java:30) 
net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:24) 
net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:215) 
net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145) 
net.sf.cglib.core.KeyFactory.create(KeyFactory.java:117) 
net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108) 
net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104) 
net.sf.hibernate.impl.SessionFactoryImpl.<clinit>(SessionFactoryImpl.java:236) 
net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:791) 
Base.HibernateUtil.<clinit>(HibernateUtil.java:15) 
org.apache.jsp.JSP.session.login_jsp._jspService(login_jsp.java:150) 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:332) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

,这是我的HibernateUtil的代码:

package Base; 

import net.sf.hibernate.*; 


import net.sf.hibernate.cfg.*; 


public class HibernateUtil { 

private static final SessionFactory sessionFactory; 

static { 
    try { 
    // Crée la SessionFactory 
    sessionFactory =new Configuration().configure().buildSessionFactory(); 
//new Configuration().configure().buildSessionFactory(); 
    } catch (HibernateException ex) { 
    throw new RuntimeException("Problème de configuration : " 
    + ex.getMessage(), ex); 
    } 
    } 

    public static final ThreadLocal session = new ThreadLocal(); 

public static Session currentSession() 
    throws HibernateException { 
    Session s = (Session) session.get(); 
    // Ouvre une nouvelle Session, si ce Thread n'en a aucune 
    if (s == null) { 
    s = sessionFactory.openSession(); 
    session.set(s); 
    } 
    return s; 
    } 

    public static void closeSession() 
     throws HibernateException { 
    Session s = (Session) session.get(); 
    session.set(null); 
    if (s != null) 
    s.close(); 
    } 
    } 

,这是.xml文件我的Hibernate配置:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration 
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"> 

<hibernate-configuration> 
<session-factory > 

     <!-- local connection properties --> 
     <property name="hibernate.connection.url">jdbc:mysql://localhost/ebook</property> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.connection.password"></property> 
     <!-- property name="hibernate.connection.pool_size"></property --> 

     <!-- dialect for MySQL --> 
      <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property> 



        <!-- Echo all executed SQL to stdout --> 
        <property name="show_sql">true</property> 

        <property name="current_session_context_class">thread</property> 

    <mapping resource="Base/Favorieensei.hbm" /> 
     <mapping resource="Base/Ajouter.hbm" /> 
    <mapping resource="Base/Favorie.hbm" /> 
    <mapping resource="Base/Enseignant.hbm" /> 
    <mapping resource="Base/Administrateur.hbm" /> 
    <mapping resource="Base/Ajouterensei.hbm" /> 
    <mapping resource="Base/Etudinat.hbm" /> 
    <mapping resource="Base/Livre1.hbm" /> 
</session-factory> 
</hibernate-configuration> 

什么导致了这种异常,怎么办我阻止它?

+0

看起来你在这里有一些不兼容的罐子。您的项目中有哪些Hibernate和asm罐子? –

回答

1

它看起来像您的运行时环境有一个与您的开发环境不匹配的asm.jar版本。例如,请参阅http://goo.gl/WMYSL

顺便说一下,我忍不住要发表评论 - 从JSP页面访问hibernate是一个非常糟糕的主意。你可能想看看使用一个体面的MVC框架,比如Spring MVC。

+0

直接,我同意。我认为在视图内部看到这是不好的做法。许多Web开发人员不会遵循MVC模式。 – user919860