2012-04-30 12 views
10

EntityManagerपरिभाषा के अनुसार थ्रेड-सुरक्षित नहीं है। Servlets चश्मा कहते हैं कि गैर वितरित वातावरण में और SingleThreadModel लागू किए बिना, प्रति परिभाषा केवल एक सर्वलेट उदाहरण है।@PersistenceContext EntityManager थ्रेड-सुरक्षा स्प्रिंग और जावा ईई

इसलिए, जावा ईई में जब आप एक EntityManager@PersistenceContext के माध्यम से सर्वलेट के क्षेत्र में इंजेक्षन - यह सुरक्षित थ्रेड नहीं कर रहा है:

public class MyServlet extends HttpServlet { 

    // Not thread-safe, should be using EMF instead. 
    @PersistenceContext 
    private EntityManager em; 
} 
  1. कहने के लिए यह सही है कि भले ही वसंत सेम के डिफ़ॉल्ट गुंजाइश सिंगलटन है, EntityManager थ्रेड-सुरक्षित है क्योंकि वसंत ThreadLocal का उपयोग अपने लेनदेन को बांधने और EntityManager से बांधने के लिए करता है?

  2. क्या ऊपर दिए गए सर्वलेट उदाहरण अभी भी वसंत में मान्य हैं? क्या यह अभी भी थ्रेड-सुरक्षित नहीं है?

  3. क्या ThreadLocal दृष्टिकोण केवल स्प्रिंग प्रबंधित बीन्स और सादे सर्वलेट के लिए काम करता है उनमें से एक नहीं है?

  4. जहां तक ​​मुझे याद है, यह EntityManager इंजेक्ट करने के लिए कंटेनर ज़िम्मेदारी है। ग्लासफ़िश जावा ईई कार्यान्वयन में, यह एप्लिकेशन सर्वर था जो @PersistenceContext इंजेक्शन बिंदु के रूप में खोजता है।
    यह वसंत में कैसा दिखता है? क्या स्प्रिंग फ्रेमवर्क उन एनोटेशन या जेपीए कार्यान्वयन की ज़िम्मेदारी की खोज के लिए ज़िम्मेदार है?

उत्तर

5

प्रश्न 2, 3, और 4 - वसंत किसी भी वर्ग पर ध्यान नहीं देता है जो वसंत बीन नहीं है। वसंत के लिए आपको MyServlet कक्षा पर ध्यान नहीं दिया जाता है। इसलिए

  • 2) के लिए जवाब नहीं
  • 3) केवल स्प्रिंग बीन्स कामयाब
  • 4) यह, स्प्रिंग्स जिम्मेदारी है क्योंकि वसंत कंटेनर

प्रश्न के लिए है 1)। यह इस तरह से काम करता है, इसलिए स्प्रिंग इंजेक्शन एंटिटी मैनेजर का उपयोग प्रभावी थ्रेड सेव है।

+0

धन्यवाद राल्फ। तो, "2) कहकर" कोई मतलब नहीं है कि यह थ्रेड-सुरक्षित नहीं है क्योंकि यह सर्वलेट स्प्रिंग बीन नहीं है, इसलिए वास्तव में ** ** कोई इंजेक्शन नहीं होगा **? क्या इस तरह के सर्वलेट को स्प्रिंग बीन के रूप में चिह्नित करना संभव है? मैं किसी भी तरह महसूस करता हूं कि यह काफी असामान्य है, अनुशंसित और गन्दा विचार नहीं - यह सिर्फ वसंत के तंत्र को समझने के लिए एक सैद्धांतिक प्रश्न है। –

+1

मेरा मतलब है कि यह वसंत बीन नहीं है (यही पहला पैराग्राफ है), इसलिए कोई इंजेक्शन नहीं है और 'em' शून्य हो जाएगा। - इसका परीक्षण करें, अगर यह शून्य नहीं है, तो कुछ वास्तव में अजीब चलता है। एक तरीका है कि आप इसे एक वसंत बीन बनाने की कोशिश कर सकते हैं '@ कॉन्फ़िगर करने योग्य' है, लेकिन इसके लिए वास्तविक AspectJ की आवश्यकता है और मुझे वास्तव में कोई जानकारी नहीं है कि यह Servlets के लिए काम करता है। – Ralph

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