EntityManager
परिभाषा के अनुसार थ्रेड-सुरक्षित नहीं है। Servlets चश्मा कहते हैं कि गैर वितरित वातावरण में और SingleThreadModel
लागू किए बिना, प्रति परिभाषा केवल एक सर्वलेट उदाहरण है।@PersistenceContext EntityManager थ्रेड-सुरक्षा स्प्रिंग और जावा ईई
इसलिए, जावा ईई में जब आप एक EntityManager
@PersistenceContext
के माध्यम से सर्वलेट के क्षेत्र में इंजेक्षन - यह सुरक्षित थ्रेड नहीं कर रहा है:
public class MyServlet extends HttpServlet {
// Not thread-safe, should be using EMF instead.
@PersistenceContext
private EntityManager em;
}
कहने के लिए यह सही है कि भले ही वसंत सेम के डिफ़ॉल्ट गुंजाइश सिंगलटन है,
EntityManager
थ्रेड-सुरक्षित है क्योंकि वसंतThreadLocal
का उपयोग अपने लेनदेन को बांधने औरEntityManager
से बांधने के लिए करता है?क्या ऊपर दिए गए सर्वलेट उदाहरण अभी भी वसंत में मान्य हैं? क्या यह अभी भी थ्रेड-सुरक्षित नहीं है?
क्या
ThreadLocal
दृष्टिकोण केवल स्प्रिंग प्रबंधित बीन्स और सादे सर्वलेट के लिए काम करता है उनमें से एक नहीं है?जहां तक मुझे याद है, यह
EntityManager
इंजेक्ट करने के लिए कंटेनर ज़िम्मेदारी है। ग्लासफ़िश जावा ईई कार्यान्वयन में, यह एप्लिकेशन सर्वर था जो@PersistenceContext
इंजेक्शन बिंदु के रूप में खोजता है।
यह वसंत में कैसा दिखता है? क्या स्प्रिंग फ्रेमवर्क उन एनोटेशन या जेपीए कार्यान्वयन की ज़िम्मेदारी की खोज के लिए ज़िम्मेदार है?
धन्यवाद राल्फ। तो, "2) कहकर" कोई मतलब नहीं है कि यह थ्रेड-सुरक्षित नहीं है क्योंकि यह सर्वलेट स्प्रिंग बीन नहीं है, इसलिए वास्तव में ** ** कोई इंजेक्शन नहीं होगा **? क्या इस तरह के सर्वलेट को स्प्रिंग बीन के रूप में चिह्नित करना संभव है? मैं किसी भी तरह महसूस करता हूं कि यह काफी असामान्य है, अनुशंसित और गन्दा विचार नहीं - यह सिर्फ वसंत के तंत्र को समझने के लिए एक सैद्धांतिक प्रश्न है। –
मेरा मतलब है कि यह वसंत बीन नहीं है (यही पहला पैराग्राफ है), इसलिए कोई इंजेक्शन नहीं है और 'em' शून्य हो जाएगा। - इसका परीक्षण करें, अगर यह शून्य नहीं है, तो कुछ वास्तव में अजीब चलता है। एक तरीका है कि आप इसे एक वसंत बीन बनाने की कोशिश कर सकते हैं '@ कॉन्फ़िगर करने योग्य' है, लेकिन इसके लिए वास्तविक AspectJ की आवश्यकता है और मुझे वास्तव में कोई जानकारी नहीं है कि यह Servlets के लिए काम करता है। – Ralph