Почему этот сервлет Hibernate вызывает исключение IllegalAccessError? - PullRequest
0 голосов
/ 30 июня 2009

Я пытался создать очень маленькое веб-приложение в 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 и сервлет контроллера следующим образом. Но если я запускаю этот сервлет, я получаю исключение.

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

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?

1 Ответ

0 голосов
/ 28 сентября 2010

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

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

Ответ на этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...