2009-06-30 7 views
0

Ich habe versucht, eine sehr kleine Web-App in NetBeans mit Hibernate zu erstellen. Ich platzierte hibernate3.jar, log4J-1.2.14.jar, sl4j.api.jar, sl4j-log4ja2-1.5.6.jar, dom4j-1.6.1.jar, jta.jar und ehcache.jar unter dem Ordner Libraries. Ich legte auch hibernate.cfg.xml unter dem default Paket des source Ordners und Standard log4j.properties Datei und Book.hbm.xml unter einem anderen Paket des Source Ordners. Ich weiß nicht, ob es richtig oder falsch ist. Ich schrieb Hibernate Manager Klasse für sessionfactory und Controller-Servlet wie folgt. Aber wenn ich dieses Servlet benutze, bekomme ich eine Ausnahme.Warum wirft dieses Hibernate-Servlet eine IllegalAccessError-Ausnahme?

Controller-Servlet:

import java.io.*; 
import java.net.*; 
import Syron.HibernateManager; 
import Syron.BookInfo; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.util.List; 

public class ControllerServlet extends HttpServlet { 

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     HibernateManager manager = new HibernateManager(BookInfo.class); 
     List categories = manager.findAll(); 
     request.setAttribute("categories", categories); 
     ServletContext context = getServletContext(); 
     try 
     { 
      RequestDispatcher dispatcher = context.getRequestDispatcher("/welcomeJSF.jsp"); 
      dispatcher.forward(request, response); 
     } 
     catch(Exception es) { 

     } 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    public String getServletInfo() { 
     return "Short description"; 
    } 

} 

Manager:

import java.util.*; 

import org.hibernate.HibernateException; 
import org.hibernate.Session; 
import org.hibernate.util.*; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 

//import org.slf4j.impl.*; 

public class HibernateManager { 
    private Class _cl; 

    public HibernateManager(Class cl) 
    { 
     _cl = cl; 
    } 

    public List findAll() throws HibernateException 
    { 
     List rv = new ArrayList(); 

     SessionFactory sessionFactory; 
     try 
     { 
      Configuration config = new Configuration(); 
      config = config.configure("/hibernate.cfg.xml"); 
      sessionFactory = config.buildSessionFactory(); 
     } 
     catch (HibernateException ex) 
     { 
      throw new RuntimeException("Exception building SessionFactory: " +ex.getMessage(), ex); 
     } 

     rv = sessionFactory.getCurrentSession().createCriteria(BookInfo.class).list(); 
     return rv; 
    } 

    public BookInfo findById(int id) throws HibernateException 
    { 
     Session session = SessionProvider.currentSession(); 
     BookInfo rv = (BookInfo) session.get(_cl, new Integer(id)); 
     return rv; 
    } 
} 

Ausnahme:

java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory 
    org.slf4j.LoggerFactory.<clinit>(LoggerFactory.java:60) 
    org.hibernate.cfg.Configuration.<clinit>(Configuration.java:152) 
    Syron.HibernateManager.findAll(HibernateManager.java:34) 
    ControllerServlet.processRequest(ControllerServlet.java:40) 
    ControllerServlet.doGet(ControllerServlet.java:62) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

ich verschiedene Dinge ausprobiert, aber konnte das nicht beheben. Was habe ich falsch gemacht? Ich legte auch die commons-logging.jar Datei anstelle von sl4j.jar, aber dann bekomme ich Ausnahmen für org.sl4j.impl.?. Also suchte ich und ersetzte sl4j-log4ja2-1.5.6.jar und versuchte es erneut wie oben. Wie kann ich Hibernate in NetBeans verwenden?

+0

Sie Herr erinnern mich, warum ich Hibernate bleiben möchte: D Konfiguration Hölle :( – Konstantinos

Antwort

0

Das offensichtlichste Problem in Ihrem Stacktrace ist:

java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory 

Die Antwort in this other SO question ist.

Verwandte Themen