论坛首页 Java企业应用论坛

struts中的ACTION纳入到SPING中的事务管理容器?

浏览 5688 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-09-23  
我们知道,针对DAO bwan的代理是纳入到SPRING的事务容器中的,也就是说他是受事务保护的,但是受保护的是整个类还是类的单个操作方法,比如,方法A调用了方法B,方法A增加了数据,方法B增加了其他数据,这时候B出现异常了,那么根据事务机制要回滚操作,这时候回滚的上限是那里?是B的开始,还是A的开始?


另外,根据相关文档,几乎所有的类都可以纳入到SPRING的事务机制中,例如STRUTS的ACTION,那么当ACTION中出现异常的时候,事务是整个回滚到ACTION的调用入口吗?假如ACTION中涉及到多个DAO的调用,是回滚所有涉及的DAO操作吗?
   发表时间:2005-09-23  
由于在SERVICE层上本身已经有事务支持了,如果ACTION层也有事务支持,那两者是什么关系哪?
0 请登录后投票
   发表时间:2005-09-27  
blackhost 写道
由于在SERVICE层上本身已经有事务支持了,如果ACTION层也有事务支持,那两者是什么关系哪?


service层上有事务支持就可以了,action层不应该有事务支持,通常action层只是调用service层提供的接口,不参与业务逻辑,不需要事务支持,如果你是在action里面直接调用dao的话,那么action层需要事务支持。

个人认为两者都有事务支持是个设计错误
0 请登录后投票
   发表时间:2005-10-06  
blackhost 写道
我们知道,针对DAO bwan的代理是纳入到SPRING的事务容器中的,也就是说他是受事务保护的,但是受保护的是整个类还是类的单个操作方法,比如,方法A调用了方法B,方法A增加了数据,方法B增加了其他数据,这时候B出现异常了,那么根据事务机制要回滚操作,这时候回滚的上限是那里?是B的开始,还是A的开始?

看你对于两个函数配置的事务策略如何。学究点的说法是a,b两个方法是否在同一个事务的context下。
比如如果a,b的配置是PROPAGATION_REQUIRED,那么说明这两个函数都在事务控制下,而且只是需要一个事务,如果当前代码下没有,那么就创建一个,如果有,就使用当前的事务,如果b回滚,a相关代码也回滚。
如果a,b的配置是PROPAGATION_REQUIRES_NEW,那么这两个函数都需要一个新的事务,b所在的context同a的不同,b回滚,a不回滚。
如果某个函数不配置,那么就处于当前事务状态下。

事务隔离类别不止我说的这两种,组合方式也有很多。基本一点事务是建立在函数基础上的,如果是在同一个事务下,即使是不同的类的方法也可以一起回滚(只要数据源一致)
blackhost 写道

另外,根据相关文档,几乎所有的类都可以纳入到SPRING的事务机制中,例如STRUTS的ACTION,那么当ACTION中出现异常的时候,事务是整个回滚到ACTION的调用入口吗?假如ACTION中涉及到多个DAO的调用,是回滚所有涉及的DAO操作吗?

要看dao所处的事务是谁创建的,如果action创建事务,所有dao享用,那么一个dao异常,所有dao回滚。如果是某个dao函数创建,其他dao不享用这个事务,那么这个dao异常,自己回滚,其他不受影响
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics