2009-06-30 2 views
0

Я попытался создать очень маленькое веб-приложение в NetBeans, используя Hibernate. Я разместил hibernate3.jar, log4J-1.2.14.jar, sl4j.api.jar, sl4j-log4ja2-1.5.6.jar, dom4j-1.6.1.jar, jta.jar и ehcache.jar под папкой Libraries. Я также разместил hibernate.cfg.xml под пакетом default папки source и по умолчанию log4j.properties и Book.hbm.xml под другим пакетом папки Source. Я не знаю, правильно это или нет. Я написал Hibernate Manager класс для sessionfactory и сервлет контроллера следующим образом. Но если я запустил этот сервлет, я получаю исключение.Почему этот сервлет Hibernate бросает исключение IllegalAccessError?

Контроллер сервлет:

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"; 
    } 

} 

менеджер:

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; 
    } 
} 

Исключение:

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) 

Я пробовал различные вещи, но не смог это исправить. Где я неправ? Я также разместил файл commons-logging.jar вместо sl4j.jar, но затем я получаю No class definition found исключений для org.sl4j.impl.?. Поэтому я обыскал и заменил sl4j-log4ja2-1.5.6.jar и попробовал снова, как указано выше. Как использовать Hibernate в NetBeans?

+0

Вы, сэр, напомните мне, почему я хочу держаться подальше от Hibernate: D Конфигурация hell :( – Konstantinos

ответ

0

Наиболее очевидная проблема в вашем StackTrace является:

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

Ответ в this other SO question.

Смежные вопросы