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 {
}
}