代码优化:处理事务的不同手段 OpenSessionInView 的Filter和Interceptor拦截器

在做hibernate和struts2的整合项目的过程中
写了一个有关doubleselect标签的Demo

在项目中最开始我使用了Hibernate中的OpenSessionInView的模式,即在用户每次提交请求的时候都通过Filter开启事务,请求结束就关闭事务,如下

@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        // TODO Auto-generated method stub
        Transaction tx = null;
        try {
            tx = HibernateSessionFactory.getSession().beginTransaction();

            chain.doFilter(req, resp);

            tx.commit();

        } catch (HibernateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            if (tx != null) {
                tx.rollback();
                System.out.println("rollback");
            }
        }
    }

实现最终的需求回过头来看这个模式其实并没有在这个Hibernate和struts2的整合Demo上派上用场,因为我又在struts2中的拦截器中进行了对acting的拦截,并将事务融入了action中,如下:

public class TranInterceptor extends AbstractInterceptor {
    @Override
    public String intercept(ActionInvocation ai) throws Exception {
        // TODO Auto-generated method stub
        Transaction tx = null;
        String invoke = null;
        try {

            tx = HibernateSessionFactory.getSession().beginTransaction();

            System.out.println("enter Interceptor");

            invoke = ai.invoke();

            tx.commit();

        } catch (HibernateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            if (tx != null) {
                tx.rollback();
                System.out.println("rollback");
            }
        }
        return invoke;
    }
}

配置文件可参照之前写的《 Struts2 Interceptor 拦截器的使用流程 》:
http://blog.csdn.net/tctctttccc/article/details/76639478
通过拦截器同样也实现了请求和事务的相互融合,拦截器中处理事务和OpenSessionInView处理事务的模式在不同的场合有不同的用法,请大家酌情甄选。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值