grails: поддерживать транзакционный контекст от сервиса к контроллеру - PullRequest
2 голосов
/ 30 сентября 2010

Сделайте транзакцию в классе обслуживания Grails, для которого установлен флаг отката:

TransactionAspectSupport
          .currentTransactionInfo()
               .transactionStatus
                    .setRollbackOnly()

, что происходит, когда мы возвращаем Контроллеру исключение:

org.springframework.transaction.UnexpectedRollbackException

который мы должны поймать в контроллере (но не в любом из классов обслуживания).Этот код подвергается рефакторингу из предыдущего решения, где вся логика произошла непосредственно в контроллере.Любой совет относительно того, что происходит, когда это исключение вызывается при возврате метода, учитывая, что:

static transactional = true

было установлено во всех классах.Угадай, какие-то тонкие стихи Контролера, происходит волшебство Служения - кто-нибудь знает об этом?На данный момент просто перехват исключительной ситуации как обходной путь, но при этом теряется объект TransactionStatus, который в противном случае был бы возвращен.

Любые мысли, которые высоко ценятся

1 Ответ

3 голосов
/ 01 октября 2010

Управление транзакциями в Grails довольно уродливо (для меня). Так что я предлагаю Spring декларативные транзакции: Глава 9. Управление транзакциями Они отлично работают в сервисах Grails.

Возвращение обратно в setRollbackOnly (). Этот метод не прост ... Хотя вы установили RollBack = true во внутренней транзакции, вы вызвали откат вашей внешней транзакции до того, что вы получаете исключение.

Некоторое время назад у меня была похожая проблема - вот полезная информация, чтобы найти лучшее решение, подходящее именно вам:

...