Можно ли оптимистичностьLockexception возникать, если установлено, что уровень изоляции APP SRV установлен для чтения?

StackOverflow https://stackoverflow.com/questions/3890460

Вопрос

Я использую 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 параллелизм и блокировка):

alt text

Но я думаю, что эта ситуация никогда не должна происходить, если сервер приложений уровня изоляции установлен для чтения.

Почему? При использовании A. Прочитал преданный Уровень изоляции, Не повторяемые чтения может произойти, но:

  1. Это не повлияет на представление памяти данных (e1 В приведенном выше примере)
  2. В большинстве случаев вы не читаете данные
    • И даже если вы делаете (и выполните не повторяемую чтение), сущность все равно может быть изменена другим потоком, прежде чем вы совершите изменения.

Подводя итоги, чтение совершено не мешает OptimisticLockException.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top