`
stworthy
  • 浏览: 526127 次
  • 来自: ...
社区版块
存档分类
最新评论

利用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

 

分享到:
评论
1 楼 LewJun 2012-10-09  
mark,又学习了。

相关推荐

    利用WDM过滤器驱动实现串口共享.pdf

    ### 利用WDM过滤器驱动实现串口共享 #### 概述 本文档主要探讨了如何通过Windows Driver Model(WDM)中的过滤器驱动来实现串行通信端口(简称“串口”)的共享功能。在多任务操作系统中,串口资源往往是有限的,...

    声明式事务控制spring+hibernate集成

    2. **声明事务边界**:在需要事务控制的方法上添加@Transactional注解,指定事务的传播行为、隔离级别、读写模式等属性。 3. **创建事务代理**:对于需要事务控制的业务服务,使用TransactionProxyFactoryBean创建...

    六自由度IRB-120机器人机械手的滑模控制与边界层控制(英文).pdf

    文章主要聚焦于利用滑模控制(Sliding Mode Control,简称SMC)结合边界层技术(Boundary Layer Method,简称BL)来改进传统的机器人控制方法,并提出了一种新颖的控制方法,即滑模边界层控制(SMCBL),以解决...

    变边界层的滑膜控制simulink+手写笔记(跟踪期望轨迹)

    在本主题中,“变边界层的滑膜控制simulink+手写笔记”是关于如何利用Simulink来实现这一控制算法的一个实例,用于跟踪期望轨迹。Simulink是MATLAB的一个扩展工具箱,它允许用户通过图形化界面构建和仿真动态系统的...

    Spring Boot数据库事务控制.zip

    7. **事物边界**:理解事务边界是确保事务正确性的关键。事务开始于@Transactional注解的方法的入口,结束于方法的返回。在此期间的所有数据库操作都将在同一个事务中进行。 8. **事务同步**:Spring提供了...

    医院预约挂号系统用例分析===边界类、控制类和实体类三种分析类图

    通过以上分析可以看出,在设计医院预约挂号系统时,合理利用边界类、控制类和实体类的概念,不仅可以帮助我们更好地理解系统的架构,还能有效地指导后续的开发工作。此外,通过绘制B-C-E包图、顺序图和协作图等UML...

    Spring控制Hibernate中的事务传播特性与隔离级别操作.docx

    在Spring框架中,为了管理和控制Hibernate事务,Spring提供了两种关键工具:HibernateTemplate和JdbcTemplate。这两个模板类简化了与数据库的交互,同时也处理了事务管理。让我们深入了解一下这两个类以及它们如何...

    spring 事务传播 demo

    本示例“spring 事务传播 demo”将聚焦于Spring的事务传播行为,这是在多个方法调用中控制事务边界的关键概念。下面我们将详细讨论相关知识点。 首先,事务传播行为是指当一个被@Transactional注解的方法被另一个@...

    利用自由边界三次样条函数拟合函数

    高等学校专业教材《数值分析》第96页例8-2的例子,利用自由边界三次样条函数拟合函数

    预测控制约束边界效应与解决方法研究.pdf

    然而,在CMPC的实际应用中,约束边界效应是一个不可忽视的问题,它可能导致控制序列变量在可行域边界发生饱和现象,从而影响控制性能和系统的稳定性。本篇文章《预测控制约束边界效应与解决方法研究》深入探讨了约束...

    spring基于AspectJ实现事务控制

    本文将深入探讨如何在Spring中利用AspectJ实现事务控制。 首先,我们需要理解什么是AspectJ。AspectJ是一种面向切面编程(AOP)的Java语言扩展,它允许开发者定义“切面”——关注点的模块化,这些关注点包括日志、...

    udf-改变边界条件

    UDF ,边界条件,主要是用UDF来改变边界条件,以此调节输出值,这是个改变温度的输出。

    SPRING事务机制DEMO

    Spring事务管理提供了一种声明式的方式来控制事务边界,使得开发者无需显式地调用开始、提交或回滚事务。 在Spring中,有以下两种事务管理方式: 1. **编程式事务管理**:开发者需要手动调用`...

    myBatis系列之七:事务管理

    6. **MyBatis拦截器与事务控制**:MyBatis提供了一个拦截器机制,可以通过自定义拦截器来扩展事务管理功能,比如实现事务的乐观锁或者读写分离策略。 7. **源码分析**:对于深入理解MyBatis的事务管理,阅读其源码...

Global site tag (gtag.js) - Google Analytics