2009-06-30 15 views
0

Hibernateを使ってNetBeansに非常に小さなWebアプリケーションを作成しようとしました。私はhibernate3.jar,log4J-1.2.14.jar,sl4j.api.jar,sl4j-log4ja2-1.5.6.jar,dom4j-1.6.1.jar,jta.jarおよびehcache.jarLibrariesフォルダの下に置いた。私はまた、sourceフォルダのdefaultパッケージの下にhibernate.cfg.xmlを置き、log4j.propertiesファイルとBook.hbm.xmlのデフォルトのファイルをSourceフォルダの下に置きました。私はそれが正しいかどうか分からない。私はsessionfactoryのためのHibernate Managerクラスとコントローラサーブレットを次のように書きました。しかし、私がこのサーブレットを実行すると例外が発生します。この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) 

私はいろいろなことを試してみましたが、これを修正することができませんでした。どこで私は間違えましたか?私もsl4j.jarの代わりにcommons-logging.jarファイルを配置しましたが、org.sl4j.impl.?の場合はNo class definition found例外が発生します。だから私は検索してsl4j-log4ja2-1.5.6.jarを置き換え、上記のようにもう一度試しました。 NetBeansでHibernateを使用するにはどうしたらいいですか?

+0

あなたは私がHibernateから離れたがっている理由を私に思い出させます:D Configuration hell :( – Konstantinos

答えて

0

あなたのスタックトレースの中で最も明白な問題がある:

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

答えはthis other SO questionです。

関連する問題