هل يمكن أن يحدث OptimisticLockexception إذا تم تعيين مستوى عزل App SRV لقراءة الالتزام؟

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

سؤال

أنا أستخدم 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 التزامن والقفل):

alt text

لكنني أعتقد أن هذا الموقف يجب ألا يحدث أبدًا إذا تم تعيين خادم تطبيق مستوى العزلة على القراءة.

لماذا ا؟ عند استخدام اقرأ ارتكبت مستوى العزلة ، قراءات غير قابلة للتكرار قد تحدث ولكن:

  1. لن يؤثر هذا في تمثيل الذاكرة للبيانات (e1 في المثال أعلاه)
  2. في معظم الوقت ، لا تعيد قراءة البيانات
    • وحتى إذا قمت بذلك (وأداء قراءة غير قابلة للتكرار) ، فقد لا يزال يتم تعديل الكيان بواسطة مؤشر ترابط آخر قبل ارتكاب تغييرات.

لتلخيص ، لن تمنع القراءة المرتكبة OptimisticLockException.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top