2010-04-06 18 views
17

मैं जेपीए सीख रहा हूँ और एक सवाल है:जब हमें एक से अधिक EntityManager की आवश्यकता होती है?

जो स्थितियों में हम एक से अधिक हमारे आवेदन में एक EntityManager की ज़रूरत है?

  • जब हमारे आवेदन एक मल्टी-थ्रेडेड आवेदन और एक से अधिक धागा है, क्योंकि EntityManager थ्रेड-सुरक्षित नहीं है जेपीए लेन-देन की जरूरत है और हम की जरूरत है:

    दो स्थितियों है कि मैं के बारे में पता कर रहा हूँ इस प्रकार हैं एक EntityManager प्रति धागा।

  • जब धागे के किसी भी एकाधिक समवर्ती लेनदेन की जरूरत है, हम चाहते हैं कि धागा में एक से अधिक EntityManager जरूरत EntityManager और EntityTransaction के बीच एक-से-एक संबंध न होने के कारण।


Q1। क्या हमें कोई अन्य स्थितियां हैं जब हमें एक से अधिक EntityManager की आवश्यकता है?

प्रश्न 2। मेरी समझ तक, प्रति व्यक्ति इकाई केवल EntityManagerFactory होना चाहिए। क्या मैं सही हूँ? यदि नहीं, तो उन स्थितियों में क्या हैं जब हमें प्रति दृढ़ता इकाई एकाधिक EntityManagerFactory की आवश्यकता होती है?

उत्तर

11

Q1: (, आदि "एक आदेश दे", एक सरल व्यापार कार्रवाई, उदाहरण के लिए "एक उपयोगकर्ता में लॉग इन करने") काम का एक इकाई: EntityManager सबसे अच्छा है "अच्छे पुराने" हाइबरनेट Session के साथ तुलना में किया जाना है। यह जरूरी नहीं है कि एक धागे से बंधे हों। यदि आप विभिन्न धागे डीबी कार्यों को निष्पादित करते हैं जो काम की एक इकाई के अंदर एक-दूसरे पर निर्भर करते हैं तो आप केवल परेशानी में भाग लेंगे। आपको उन्हें सिंक में निष्पादित करने की आवश्यकता होगी (अधिमानतः, एक धागे में क्रम में)। यदि उदाहरण के लिए यदि कोई उपयोगकर्ता लॉग इन करता है (जो उचित रूप से एक-दूसरे की जानकारी को परेशान नहीं करेगा) को साफ़ करने के लिए कुछ "पुराने लॉग" को साफ करने के लिए व्यावसायिक आवश्यकता होती है, तो आप इसे काम की एक इकाई के अंदर दो अलग-अलग धागे में पूरी तरह से निष्पादित कर सकते हैं।

प्रश्न 2: आपकी समझ सही है। हालांकि आप एक से अधिक बना सकते हैं, लेकिन इससे कोई अर्थ नहीं होगा और न ही कोई लाभ होगा। यह केवल महत्वपूर्ण ओवरहेड जोड़ देगा।

+0

Q1 के लिए: मुझे लगता है कि एक _Entity Manager_ वस्तु कम से कम भूमि के ऊपर होना चाहिए, लेकिन मैं अभी भी पूछने के लिए कितना भूमि के ऊपर :) वाह, यह diff धागे कि एक दूसरे पर निर्भर करता है और अधिक जटिल है खुजली कर रहा हूँ। तो क्या यह कहना सुरक्षित है कि आपके पास प्रति थ्रेड 1 ईएम होना चाहिए? फिर आप सुनिश्चित करते हैं कि आप किसी भी अपवाद को पकड़ लें क्योंकि आपके पास एक ही टेबल का उपयोग करके एकाधिक धागे हैं, है ना? – thirdy

+0

हाँ चूंकि ईएम थ्रेड सुरक्षित नहीं है, अगर मैं इसके चारों ओर एक रैपर बना देता हूं और इसमें रैपर में 'सिंक्रनाइज़' सेव/अपडेट विधियों को शामिल किया जाता है, जो आंतरिक रूप से ईएम को सहेज/अपडेट कहते हैं, तो कई धागे में इसका उपयोग किया जा सकता है। मैं भी ईएम को साफ़/बंद नहीं करता? मुझे लगता है कि एक साथ पढ़ने और लिखने के लिए अभी भी समस्याएं हो सकती हैं। क्या आप कृपया मुझे इस पर अपनी टिप्पणियां बता सकते हैं? – bluelurker

संबंधित मुद्दे

 संबंधित मुद्दे