Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ओरेकल के साथ जेपीए में मेरा निराशावादी लॉकिंग क्यों काम नहीं कर रहा है

अंत में मैं इसे काम करने में कामयाब रहा लेकिन कुछ संशोधनों के साथ। विचार PESSIMISTIC_WRITE के बजाय LockModeType.PESSIMISTIC_FORCE_INCREMENT का उपयोग करना है। इस लॉक मोड का उपयोग करते हुए क्रॉन जॉब्स निम्नानुसार व्यवहार करता है:

  1. जब पहली नौकरी अपडेट के लिए चयन करती है तो सब कुछ अपेक्षित होता है लेकिन ऑब्जेक्ट पर संस्करण बदल जाता है।
  2. यदि कोई अन्य कार्य उसी चयन को करने का प्रयास करता है जबकि पहला अभी भी लेन-देन पर है, तो जेपीए एक ऑप्टिमिस्टिक लॉक अपवाद लॉन्च करता है ताकि यदि आप उस अपवाद को पकड़ लेते हैं तो आप सुनिश्चित हो सकते हैं कि इसे रीड लॉक के लिए फेंक दिया गया था।

इस समाधान के कई प्रतिरूप हैं:

  1. SynchronizedCronJobTask में एक संस्करण फ़ील्ड होना चाहिए और @Version के साथ संस्करण नियंत्रण में होना चाहिए
  2. आपको OptimisticLockException को संभालने की आवश्यकता है, और इसे लॉक होने पर रोलबैक करने के लिए ट्रांजेक्शनल सर्विस मेथड के बाहर पकड़ा जाना चाहिए।
  3. IMHO एक गैर-सुरुचिपूर्ण समाधान है, जो केवल उस लॉक से भी बदतर है जहां क्रॉन जॉब्स पिछली नौकरियों के समाप्त होने की प्रतीक्षा करते हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में अग्रणी शून्य के साथ एक संख्या को प्रारूपित करने के 2 तरीके

  2. NHibernate के साथ एक ही ASP.NET ऐप में Oracle और SQL सर्वर दोनों का समर्थन करने के लिए सिफारिशें

  3. Oracle SQL में 'YYYY' और 'RRRR' में क्या अंतर है?

  4. Oracle में दिनांक स्वरूपण करते समय दिन और महीने के नामों का कैपिटलाइज़ेशन

  5. SQL डेवलपर का उपयोग करके Oracle में स्कीमा कैसे बनाएं?