Андрюшка (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

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

    Error

    default userpic

    Your IP address will be recorded 

  • 8 comments