Я сталкиваюсь с некоторыми проблемами при использовании замка в Grails.
Ситуация следующая:
У меня есть класс User, а затем другой класс UserProperty, который имеет свойство belognsTo = User.
Теперь, чтобы избежать одновременного изменения пользователем этих свойств, я хочу заблокировать пользователя, а после этого изменить / добавить / удалить новые свойства.
Но блокировка, похоже, не работает, поскольку в обоих случаях запрос проходит через него. Псевдокод выглядит примерно так:
User.lock(userId)
log.info "Starting modifiying properties"
addRemoveOrChangePropertiesToUser(userId)
log.info "Finsih modifing properties"
User.save(flush: true)
Я ожидаю поведения, когда первый запрос проходит и регистрирует все. И до этого (поскольку пользователь заблокирован) второй запрос ждет, а затем вносит изменения в свойства.
Основываясь на файлах журнала, я вижу совершенно другое поведение. Оба запроса обрабатываются без какого-либо времени ожидания (почти одновременно).
У вас есть идея, что я делаю не так? Я неправильно понял некоторые концепции, связанные с блокировкой БД? Как мне добиться желаемого поведения?
Спасибо,
Nicolas