هل يمكن أن يحدث OptimisticLockexception إذا تم تعيين مستوى عزل App SRV لقراءة الالتزام؟
-
28-09-2019 - |
سؤال
أنا أستخدم WebSphere Application Server 7.0.0.0.9 مع ؛ OpenJPA 1.2.3-snapshot '. لقد قمت بتعيين خاصية لمصدر بيانات JDBC WebSpheredEfaultIsOlationLevel = 2 (قراءة ملتزمة). لدي هذا السؤال لأن فهمي هو أن OptimActionLockexception يحدث إذا كان هناك عرق لارتكاب نفس الصف من خلال مؤشر ترابط متعددة. لكنني أعتقد أن هذا الموقف يجب ألا يحدث أبدًا إذا تم تعيين خادم تطبيق مستوى العزلة على القراءة.
هذا استثناء أحصل عليه ..
<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 التزامن والقفل):
لكنني أعتقد أن هذا الموقف يجب ألا يحدث أبدًا إذا تم تعيين خادم تطبيق مستوى العزلة على القراءة.
لماذا ا؟ عند استخدام اقرأ ارتكبت مستوى العزلة ، قراءات غير قابلة للتكرار قد تحدث ولكن:
- لن يؤثر هذا في تمثيل الذاكرة للبيانات (
e1
في المثال أعلاه) - في معظم الوقت ، لا تعيد قراءة البيانات
- وحتى إذا قمت بذلك (وأداء قراءة غير قابلة للتكرار) ، فقد لا يزال يتم تعديل الكيان بواسطة مؤشر ترابط آخر قبل ارتكاب تغييرات.
لتلخيص ، لن تمنع القراءة المرتكبة OptimisticLockException
.