优秀是一种习惯

 

借助 Spring AOP 进行事务管理之一

当使用 spring 的 AOP 为 web 应用提供事务管理服务时,我们需要指定事务策略,指定事务策略的格式如下:

       1. 传播行为, 隔离层级, 只读, +异常, -异常

       2. 传播行为必须设置,其他均可选择性地设置,中间以英文逗号分隔,例如:PROPAGATION_REQUIRED,readOnly,-BusinessException, 注意:在 BusinessException 前面加上 - 号表示发生指定异常时回滚操作,如果加上 + 号则表示发生指定异常时立即提交操作。

       3. 如果你没有指定发生异常时事务该怎样进行,那么当真的在某个事务中发生很严重的异常时它不会回滚事务的。而这不是我们期望看到的,所以在这里应该指定你的应用异常(即业务逻辑异常)。

下面结合一个实例来总结一下指定事务策略时需要注意的问题。这个实例模拟一个 HR 系统中非常简单的一部分业务逻辑--新建一个员工信息的同时为其新建一个系统用户。

服务层的代码:

 

AnotherEmpService 类源码

 

EmployeeDAO 类中的 insert 方法可以正常执行成功,故该类的源代码省略。而在 UserDAO 类中我人为地扔出了一个 Exception 类型的异常,其源码如下:

UserDAO 类源码

 

声明式事务的配置如下:

相关配置

 

也就是说,我们准备在服务层进行事务控制,并希望将新建员工、新建用户这两个原子性的操作作为一个完整的事务执行。在这里有两个重要的因素影响着它们能否作为一个完整的事务而执行。下面我以一个表格的形式展示我的测试结果:

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2009-08-10 11:59 黄土高坡 阅读(181) 评论(0)  编辑  收藏


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


网站导航:
 

导航

统计

常用链接

留言簿

随笔分类

随笔档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜