为什么这个HibernateServlet会引发IllegaAccessError异常?
我尝试使用Hibernate在NetBeans中创建一个非常小的web应用程序。我把为什么这个HibernateServlet会引发IllegaAccessError异常?,hibernate,netbeans,Hibernate,Netbeans,我尝试使用Hibernate在NetBeans中创建一个非常小的web应用程序。我把hibernate3.jar,log4J-1.2.14.jar,sl4j.api.jar,sl4j-log4ja2-1.5.6.jar,dom4j-1.6.jar,jta.jar,和ehcache.jar放在库文件夹下。我还将hibernate.cfg.xml放在source文件夹的default包下,将defaultlog4j.properties文件和Book.hbm.xml放在source文件夹的另一个包下
hibernate3.jar
,log4J-1.2.14.jar
,sl4j.api.jar
,sl4j-log4ja2-1.5.6.jar
,dom4j-1.6.jar
,jta.jar
,和ehcache.jar
放在库
文件夹下。我还将hibernate.cfg.xml
放在source
文件夹的default
包下,将defaultlog4j.properties
文件和Book.hbm.xml
放在source
文件夹的另一个包下。我不知道这是对还是错。我为sessionfactory
和controllerservlet编写了hibernatemanager
类,如下所示。但是如果我运行这个servlet,我会得到一个异常
控制器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";
}
}
经理:
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)
java.lang.IllegalAccessError:尝试从类org.slf4j.LoggerFactory访问字段org.slf4j.impl.StaticLoggerBinder.SINGLETON
LoggerFactory(LoggerFactory.java:60)
org.hibernate.cfg.Configuration.(Configuration.java:152)
Syron.HibernateManager.findAll(HibernateManager.java:34)
processRequest(ControllerServlet.java:40)
doGet(ControllerServlet.java:62)
javaservlet.http.HttpServlet.service(HttpServlet.java:617)
javaservlet.http.HttpServlet.service(HttpServlet.java:717)
我尝试了各种方法,但都无法解决这个问题。我哪里出错了?我还放置了
commons logging.jar
文件,而不是sl4j.jar
,但随后我发现没有找到org.sl4j.impl.
的类定义。所以我搜索并替换了sl4j-log4ja2-1.5.6.jar
,然后像上面一样重试。如何在NetBeans中使用Hibernate?stacktrace中最明显的问题是:
java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory
答案就在这里。先生,您提醒我为什么要远离Hibernate:D配置地狱:(