2010-03-02 10 views
5

मैं जेपीए 2.0 के एक्लिप्ससेंक कार्यान्वयन का उपयोग कर रहा हूं जो निराशावादी लॉकिंग की अनुमति देता है। मुझे पता है कि एक इकाई को कैसे लॉक करना है, लेकिन मैं लॉक कैसे जारी करूं? सबसे पहले मैंने सोचा कि यह सब एक लेनदेन के भीतर ख्याल रखा गया था (दूसरे शब्दों में, जब तक आप लेनदेन नहीं करते हैं तब तक इकाई लॉक हो जाती है), लेकिन ऐसा लगता है कि ऐसा नहीं लगता है।जेपीए का उपयोग कर लॉक की गई पंक्ति को कैसे रिलीज़ करें?

मैं एक त्वरित गूगल खोज करने की कोशिश की है (इस तरह लगता है बहुत स्पष्ट होना चाहिए), लेकिन मैं कुछ भी नहीं मिला है ...

उत्तर

9

कुछ नींद हो रही है ... और सुबह में कुछ और परीक्षण करने के बाद, मेरा मानना ​​है कि मैंने अपनी समस्या का पता लगाया है। तो लॉक वास्तव में एक लेनदेन के भीतर ख्याल रखा जाता है। हालांकि, जब मैं अपने कोड का परीक्षण कर रहा था, तो मैं EntityManager.find (कक्षा, कुंजी) विधि (कोई लॉकिंग रणनीति निर्दिष्ट नहीं) का उपयोग कर लॉक की गई पंक्ति को पुनर्प्राप्त करने में सक्षम था। मैंने गलती से सोचा कि एक पंक्ति पर ताला लगाकर, पंक्ति को पढ़ा नहीं जा सका। अवधि। हालांकि, मैं PESSIMISTIC_READ और PESSIMISTIC_WRITE की जेपीए परिभाषाओं को पुन: पढ़ने और मेरी समस्या पर ध्यान:

PESSIMISTIC_READ - इकाई डेटाबेस पर लॉक होता है, किसी अन्य लेन-देन से एक PESSIMISTIC_WRITE ताला प्राप्त करने से रोकता है। PESSIMISTIC_WRITE - इकाई डेटाबेस पर बंद है, से किसी अन्य लेनदेन को PESSIMISTIC_READ या PESSIMISTIC_WRITE लॉक प्राप्त करने से रोकती है।

ताला आवश्यक रूप से सभी को नहीं रोकता है पढ़ता है, यह सिर्फ पंक्ति पर एक पढ़ने या लिखने ताला डाल से दूसरे लेन-देन से बचाता है।