hibernate的OpenSessionInView

package cn.itcast.tool.hibernate.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.tool.hibernate.util.HibernateUtil;


public class OpenSessionInViewFilter implements Filter{

    public void destroy() {
        
    }

    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        /*
         * 请求开始打开事务,请求完成提交事务,请求异常回滚事务,一个session对应一个请求
         */
        Session session=null;
        Transaction tx=null;
        try{
            session=HibernateUtil.getSession();
            boolean flag=session.isOpen();
            System.out.println(flag);
            tx=session.beginTransaction();
            
            arg2.doFilter(arg0, arg1);
            tx.commit();
        }catch(Exception e){
            if(tx!=null) 
                tx.rollback();
            throw new RuntimeException(e.getMessage(),e);
        }finally{
            if(session!=null) HibernateUtil.closeCurrentSession();
        }
        
    }

    public void init(FilterConfig arg0) throws ServletException {
        
    }

}

 

posted @ 2016-10-19 14:21  guodaxia  阅读(66)  评论(0编辑  收藏  举报