使用Servlet过滤器来实现OSIV模式(Open Session In View 模式)
util中的代码,用于获得SessionFactory
package com.lbx.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateSessionFactoryUtil {
private static final SessionFactory sessionFactory ;
private HibernateSessionFactoryUtil(){
}
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
}catch(Throwable e){
throw new ExceptionInInitializerError(e);
}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}
Servlet的Filter代码
package com.lbx.servlet;
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.SessionFactory;
import org.hibernate.Transaction;
import com.lbx.util.HibernateSessionFactoryUtil;
/**
* 使用Servlet过滤器来实现OSIV模式(Open Session In View 模式)
* @author Administrator
*
*/
public class HibernateSessionFilter implements Filter {
private SessionFactory sessionFactory;
@Override
public void destroy() {
// TODO Auto-generated method stub
sessionFactory.close();
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
Transaction tx = null;
try{
Session session = sessionFactory.getCurrentSession();
tx = session.beginTransaction();
chain.doFilter(request, response);
tx.commit();
}catch(Exception e){
e.printStackTrace();
try{
if(tx.isActive()){
tx.rollback();
}
}catch(Exception e2){
e2.printStackTrace();
}
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
sessionFactory = HibernateSessionFactoryUtil.getSessionFactory();
}
}
修改web.xml文件(配一个Filter)
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name>hibernateSessionFactory</filter-name> <filter-class>com.lbx.servlet.HibernateSessionFilter</filter-class> </filter> <filter-mapping> <filter-name>hibernateSessionFactory</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>