使用STRUTS2和hibernate4的项目中,忽然出现了下面这种错误,怎么搞都搞不定啊
各位大神们有遇到过相似的问题吗2012-5-22 18:18:12 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [jsp] in context with path [/itcastOA_03_2] threw exception [Filter execution threw an exception] with root cause
java.lang.NoClassDefFoundError: Could not initialize class cn.itcast.oa.util.HibernateUtils
at cn.itcast.oa.filter.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:63)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1805)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)下面是OpenSessionInViewFilter文件package cn.itcast.oa.filter;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;import org.hibernate.Session;
import org.hibernate.Transaction;import cn.itcast.oa.util.HibernateUtils;public class OpenSessionInViewFilter implements Filter { @Override
public void destroy() {
// TODO Auto-generated method stub } @Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
//Session session = HibernateUtils.getCurrentSession();
try{
chain.doFilter(req, resp);

Session session = HibernateUtils.getCurrentSession();
if(session != null){
session.getTransaction().commit();
}
}catch(Exception e){
Session session = HibernateUtils.getCurrentSession();
if(session != null){
session.getTransaction().rollback();
}
throw new RuntimeException(e);
}finally{
Session session = HibernateUtils.getCurrentSession();
if(session != null){
HibernateUtils.closeCurrentSession();
System.out.println("关闭session,事务结束");
}
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub }}
以及HibernateUtils文件,来获取当前session的package cn.itcast.oa.util;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static SessionFactory sessionFactory;
// private static Map<Thread, Session> sessionMap = new Hashtable<Thread, Session>();
private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); static {
sessionFactory = new Configuration().configure().buildSessionFactory();
} // /**
// * 获取当前线程对应的Session,如果没有,就创建一个Session,并与当前线程关联
// */
// public static Session getCurrentSession() {
// Session session = threadLocal.get(); // sessionMap.get(Thread.currentThread());
// if (session == null) {
// session = sessionFactory.openSession();
// threadLocal.set(session); // sessionMap.put(Thread.currentThread(), session);
// }
// return session;
// } /**
 * 创建一个Session,并与当前线程关联
 */
public static Session openSession() {
Session session = sessionFactory.openSession();
threadLocal.set(session); // sessionMap.put(Thread.currentThread(), session);
return session;
} /**
 * 获取当前线程对应的Session,如果没有,就返回null
 */
public static Session getCurrentSession() {
return threadLocal.get(); // sessionMap.get(Thread.currentThread());
} /**
 * 关闭当前线程对应的Session,并移除与当前线程的关联
 */
public static void closeCurrentSession() {
Session session = threadLocal.get(); // sessionMap.get(Thread.currentThread()); session.close();
threadLocal.remove();// sessionMap.remove(Thread.currentThread());
}
}

解决方案 »

  1.   

    看看这个类HibernateUtils,说它不能初始化,是不是没有找到这个类呢?》
      

  2.   

    public static Session getCurrentSession() throws HibernateException {    
                   Session s = session.get();    
                   if(s == null) {    
                         s = sessionFactory.openSession();    
                         session.set(s);    
                   }    
                   return s;    
           } 
      

  3.   

    应该是下面的代码报错了
    static {
    sessionFactory = new Configuration().configure().buildSessionFactory();
    }加上try catch看看具体的错误是什么,可能是配置有问题