Мы столкнулись с проблемой транзакции с Grails.
Во время теста производительности у нас есть сценарий, когда один API вызывается несколько раз для одного и того же пользователя.
Во время каждого вызова что-то изменяется в доменном объекте и сохраняется в базе данных.
Мы обнаружили, что, возможно, обновление базы данных будет выполнено после того, как ответ будет отправлен клиенту, и ДО того, как на сервер поступит другой запрос на тот же API.
Таким образом, мы заканчиваем другим вызовом API, который выбирает данные из базы данных до того, как первый вызов API обновляет их, и мы получаем StaleObjectStateException, когда второй запрос пытается сохранить данные в базе данных.
Мы использовали функцию автоматической фиксации в Grails, которая сохраняет все после завершения транзакции. Итак, первое решение было начать использовать .save () перед render () в контроллере.
Это нормально, когда вы делаете это для простых API, но у нас есть некоторые более сложные API, где нам нужно было бы отслеживать довольно много объектов и сохранять их явно. В настоящее время кажется, что работает без сброса: правда, но мы все еще тестируем.
Итак, мой вопрос: есть ли способ убедиться, что ответ не отправлен до того, как транзакция будет выполнена в Grails?