在拦截器中开始并提交事务

时间:2013-11-29 19:33:58

标签: java hibernate struts2 transactions interceptor

使用拦截器来管理交易是一种好习惯吗? 我有一个强点,虽然它相当于在动作本身中开始和提交。 为什么我要使用拦截器管理的事务呢?

enter image description here

1 个答案:

答案 0 :(得分:3)

实践并不错,例如Spring框架使用@Transactional注释的“自动开始”和“自动提交”事务的方面。

Why should I use interceptor managed transactions at all?

它减少了许多样板代码:打开连接,开始事务,提交事务和关闭连接。

但是如果你想用拦截器编写自己的事务管理器 - 小心并发问题

根据您发布的图片:

最好不要从服务层公开事务管理。如果您的表示层对事务管理一无所知,那就更好了。因此,请尝试将事务管理代码封装在服务层或DAO层中。如果您的表示层管理事务而服务层不是,则意味着您的服务不是自包含的,只有在客户端提供某些事务管理逻辑时,它们才能被其他客户端重用。

来自评论:

  

最好是将事务管理代码放到服务层,因为   服务层通常执行一些业务级别的操作   必须在一次交易中执行。所以你的服务方法可以   使用2个或更多DAO在一个事务中执行所有数据库操作。   对不起,没有链接 - 我根据自己的经验告诉你。