Какой рекомендуемый шаблон в Grails для написания записи аудита для определенных действий независимо от того, как завершается транзакция? Пример: попытка онлайн-регистрации пользователя, которая может завершиться неудачно по ряду причин.
Базовое предположение: бизнес-логика ограничена транзакционными методами обслуживания.
Основная неопределенность: следует ли прервать транзакцию, создав исключение RuntimeException в службе? Руководство по Grails подразумевает это, но Берт Беквит однажды сказал (наверное, посмеиваясь), что это все равно, что бить себя молотком, чтобы позаботиться о себе.
Учитывая многословную логику с несколькими проверками, удобно генерировать исключение при обнаружении конфликта. Всю транзакцию нужно откатить, но запись аудита все равно написать.
Н.Б. Существует несколько подключаемых модулей аудита Grails, но они записывают изменения в закрепленных объектах домена.