随笔 - 6  文章 - 129  trackbacks - 0
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(14)

随笔档案(6)

文章分类(467)

文章档案(423)

相册

收藏夹(18)

JAVA

搜索

  •  

积分与排名

  • 积分 - 814920
  • 排名 - 49

最新评论

阅读排行榜

评论排行榜

实现的功能:   通过Hibernate的工具类得到一个全局唯一的SessionFactory对象
                        通过SessionFactory对象得到Session对象,然后开始一个新的事务
                        通过chain对象的doFilter()方法来完成业务处理
                        提交或者回滚事务.

HibernateFilter.java

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 javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.SessionFactory;

import cn.hxex.blog.hibernate.HibernateUtil;

public class HibernateFilter implements Filter {

    private static Log log = LogFactory.getLog(HibernateFilter.class);

    /**
     * 过滤器的主要方法
     * 用于实现Hibernate事务的开始和提交
     */
    public void doFilter(ServletRequest request,
                         ServletResponse response,
                         FilterChain chain)
            throws IOException, ServletException
    {
     // 得到SessionFactory对象的实例
     SessionFactory sf = HibernateUtil.getSessionFactory();

        try
        {
         // 开始一个新的事务
            log.debug("Starting a database transaction");
            sf.getCurrentSession().beginTransaction();

            log.debug( "Request Path:\t" + ((HttpServletRequest)request).getServletPath() );
            // Call the next filter (continue request processing)
            chain.doFilter(request, response);

            // 提交事务
            log.debug("Committing the database transaction");
            sf.getCurrentSession().getTransaction().commit();

        }
        catch (Throwable ex)
        {
         ex.printStackTrace();
            try
            {
             // 回滚事务
                log.debug("Trying to rollback database transaction after exception");
                sf.getCurrentSession().getTransaction().rollback();
            }
            catch (Throwable rbEx)
            {
                log.error("Could not rollback transaction after exception!", rbEx);
            }

            // 抛出异常
            throw new ServletException(ex);
        }
    }

    /**
     * Servlet过滤器的初始化方法
     * 可以读取配置文件中设置的配置参数
     */
    public void init(FilterConfig filterConfig) throws ServletException {}

    /**
     * Servlet的销毁方法
     * 用于释放过滤器所申请的资源
     */
    public void destroy() {}

}



posted on 2007-08-29 21:29 Ke 阅读(726) 评论(0)  编辑  收藏 所属分类: hibernate

只有注册用户登录后才能发表评论。


网站导航: