Андрюшка (jonny81) wrote in ru_grails,
Андрюшка
jonny81
ru_grails

Optimistic Locking

Помогите разобраться с оптимистичными блокировками.

Простая модель для тестирования:
class Registration
{
	Date dateRequest;
}

в таблице есть одна запись с id = 1



1) Следующий код отрабатывает без проблем:
def testOne = {
	def one = Registration.get(1);
	def two = Registration.get(1);

	one.dateRequest = new Date();
	one.save(flush: true);

	sleep(1000);

	two.dateRequest = new Date();
	two.save(flush: true);
}


По моей логике на строке two.save должен сработать exception, так как при one.save поле `version` в таблице увеличивается на единицу и данные считаются уже измененными.

2) Кучу не понятных exception, хотя должен быть быть только один (судя по документации http://www.grails.org/doc/latest/guide/single.html#5.3.5 Pessimistic and Optimistic Locking)
def testTwo
{
	def existReg = Registration.get(1);

	if (params.test)
	{
		sleep(5000);
	}

	try
	{
		existReg.dateRequest = new Date();
		existReg.save(flush: true);
	}
	catch(org.springframework.dao.OptimisticLockingFailureException e)
	{
	}
}


запускаю в следующей последовательности:
* /site/testTwo?test=1 (открывает запись и засыпает на 5 секунд)
* /site/testTwo (открывает запись, изменяет, сохраняет успешно)

Далее первый запрос через 5 секунд при сохранении отваливается с ошибками:

Error 500: Object of class [Registration] with identifier [1]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [Registration#1]
Servlet: grails
URI: /app/grails/site/testTwo.dispatch
Exception Message: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [Registration#1]
Caused by: Object of class [Registration] with identifier [1]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [Registration#1]
Class: Unknown

Кто как работает с оптимистичными блокировками ? И что делать ?
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 8 comments