grails:维护从Service到Controller的事务上下文

时间:2010-09-30 18:40:14

标签: grails transactions service controller

在grails服务类中设置回滚标志的事务:

TransactionAspectSupport
          .currentTransactionInfo()
               .transactionStatus
                    .setRollbackOnly()

当我们向Controller返回异常时会发生什么:

org.springframework.transaction.UnexpectedRollbackException

我们必须在Controller中捕获(但不在任何Service类中)。此代码正在从之前的解决方案中重构,其中所有逻辑都直接在Controller中发生。任何关于在该方法返回时抛出此异常的事件的建议,给出:

static transactional = true

已在所有课程上设置。猜测一些微妙的控制器经文服务魔术发生 - 有谁知道这个?现在只是将异常作为一种解决方法来捕获,但是这会丢失原本会被返回的TransactionStatus对象。

任何想法都非常感激

1 个答案:

答案 0 :(得分:3)

Grails中的事务管理非常难看(对我而言)。 所以我正在提供Spring声明式事务: Chapter 9. Transaction management 它们完美地用于grails服务。

返回setRollbackOnly()。这个方法并不简单......当你在内部事务中设置了RollBack = true时,你已经触发了将外部事务回滚到你正在获得异常的事情。

我前段时间遇到过类似的问题 - 找到适合您的最佳解决方案是有用的信息: