Распространены ли пессимистичные блокировки Hibernate с помощью EHCache / Terracotta? - PullRequest
1 голос
/ 28 ноября 2011

Может ли Hibernate реализовать пессимистическую блокировку в начале транзакции Java или вместо этого полагаться на пессимистическую блокировку, применяемую после выполнения всей работы в области Java, а затем изменения применяются к базе данных как часть транзакция базы данных?

Я спрашиваю, поскольку у меня есть транзакция Java, на полпути к которой осуществляется вызов удаленного веб-сервиса, который не является транзакционным и поэтому не может быть откатан. Если Hibernate удерживает пессимистическую блокировку данных, на которые выполняется действие, то обработка транзакции должна быть заблокирована, поскольку Hibernate знает, что другой поток уже воздействует на эти данные. Если Hibernate не сам не отслеживает такие блокировки, тогда транзакция Java продолжится, вызывая веб-сервис, а затем блокируя коммит БД.

Я действительно хочу, чтобы Java-транзакция запустилась, другой поток попытался запустить другую транзакцию и заблокировал / потерпел неудачу, потому что она уже выполняется для соответствующих данных.

Как влияет блокировка, когда Hibernate использует EHCache в качестве 2LC в распределенном режиме с Terracotta?

Ответы [ 2 ]

2 голосов
/ 28 ноября 2011

Пессимистичные блокировки Hibernate - это блокировки базы данных. Блокировка делегируется базе данных. Кэш второго уровня не имеет к этому никакого отношения.

0 голосов
/ 28 ноября 2011

"Hibernate не блокирует объекты в памяти."

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/transactions.html

Ничего похожего на RTFM :)

...