Можно ли оптимистичностьLockexception возникать, если установлено, что уровень изоляции APP SRV установлен для чтения?
-
28-09-2019 - |
Вопрос
Я использую WebSphere Application Server 7.0.0.0.9 с; OpenJPA 1.2.3-Snapshot '. У меня установлено свойство IDBC источника данных WebSpheredefaultiColationLevel = 2 (чтение предано). У меня есть этот вопрос, потому что мое понимание - это оптическим применением. Но я думаю, что эта ситуация никогда не должна происходить, если сервер приложений уровня изоляции установлен для чтения.
Это исключение, которое я получаю ..
<openjpa-1.2.3-SNAPSHOT-r422266:907835 fatal store error> org.apache.openjpa.persistence.OptimisticLockException: An optimistic lock violation was detected when flushing object instance
Решение
У меня есть этот вопрос, потому что мое понимание
OptimisticLockException
Происходит, если есть гонка, чтобы совершить один и тот же ряд по нескольким потокам.
Да, Ан OptimisticLockException
будет брошен, если Version
Атрибут объекта выше (т. Е. был изменен другой транзакцией) при контрольном времени, чем когда он был прочитан. Это проиллюстрировано на рисунке ниже (заимствована из JPA 2.0 параллелизм и блокировка):
Но я думаю, что эта ситуация никогда не должна происходить, если сервер приложений уровня изоляции установлен для чтения.
Почему? При использовании A. Прочитал преданный Уровень изоляции, Не повторяемые чтения может произойти, но:
- Это не повлияет на представление памяти данных (
e1
В приведенном выше примере) - В большинстве случаев вы не читаете данные
- И даже если вы делаете (и выполните не повторяемую чтение), сущность все равно может быть изменена другим потоком, прежде чем вы совершите изменения.
Подводя итоги, чтение совершено не мешает OptimisticLockException
.