2014-12-24 8 views
0

У меня есть следующий метод в моем контроллере:Grails транзакционного контроллера, обработка исключений

@Transactional 
    def update(Filter filterInstance) { 
     bindData(filterInstance, params, [include: ['name, 'code', 'value']]) 

     filterService.update(filterInstance) 
     mappingService.update(filterInstance) 

     respond filterInstance 
    } 

мне нужно использовать @Transactional здесь, потому что я называю несколько служб. Как обращаться с случаем, когда транзакция сбой по какой-либо причине? Должен ли я использовать попробуйте поймать или может быть какой-то другой способ?

Спасибо!

ответ

2

Если у вас есть код внутри контроллера действий, вы должны держать глаз на 2 вещи:

  • transactionality (с попытаться/поймать/наконец и т.д.)
  • что следует возвращение действия/рендеринга в случае TX-success/-failure.

Это достаточно сложно, поэтому вы должны поместить вызовы службы в другой метод обслуживания, где вам приходится иметь дело только с транзакциями.

Контролирующее действие - это место, где вы можете совершать действительно простые одношаговые транзакции. Если вам необходимо реализовать более сложную TX-логику, сделайте это на уровне обслуживания

см. ref-doc о том, как управлять многоэтапными транзакциями.

вы можете заставить методы update() возвращать ложные или выдавать исключение, а если такая вещь возникает, позвоните status.setRollbackOnly(). Не забудьте также отметить методы update() с помощью @Transactional(propagation = Propagation.SUPPORTS)

 Смежные вопросы

  • Нет связанных вопросов^_^