利用etmvc的环绕过滤器控制事务边界

环绕过滤器能够在Action执行之前和之后执行一段代码,相比前置过滤器和后置过滤器而言更加强大。可以为Action设置多个环绕过滤器,通过在控制器上进行注解:

@AroundFilters({
    @AroundFilter(execute=A.class),
    @AroundFilter(execute=B.class)
})
public class ApplicationController extends Controller{

环绕过滤器可以接受only和except参数以控制在那些Action上执行。

注意前置和后置过滤器的execute是执行的方法名称,而环绕过滤器的execute是一个类,这个类必须实现AroundHandler接口,或者继承AbstractAroundHandler类。

多个环绕过滤器的执行是嵌套的,如上例的执行顺序如下:

A.before

    B.before

        Action

    B.after

A.after

 

环绕过滤器可以处理身份验证,错误处理,日志处理,事务控制等,比如在Action中操作数据库的代码,如果需要事务控制,可以写上

try{
    beginTransaction();
    ...
    commit();
}
catch(Exception ex){
    rollback();
}

之类的代码,但利用环绕过滤器可以有更优雅的做法,这时Action代码保持不变,注解加上事务过滤器就好,过滤器代码如下所示:

public class TranFilter extends AbstractAroundHandler{
    @Override
    public boolean before(Controller controller) throws Exception{
        ActiveRecordBase.beginTransaction();
        return true;
    }
    @Override
    public boolean after(Controller controller) throws Exception{
        if (controller.getException() == null){
            ActiveRecordBase.commit();
        }
        else{
            ActiveRecordBase.rollback();
        }
        return true;
    }
}

before方法保证执行在Action 之前,after则执行在Action之后,且只要before执行成功,保存一定会执行after。这样,在需要事务控制的控制器上,只要加上

@AroundFilter(execute=TranFilter.class, only={"update","create"}) 

这样的代码就行了。

 

关于etmvc的详细资料,请访问www.etmvc.cn

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值