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?
Sie Herr erinnern mich, warum ich Hibernate bleiben möchte: D Konfiguration Hölle :( – Konstantinos