2012-07-29 12 views
11

से एक JDBC कनेक्शन हो रही है, मैं बस बुला2.0 प्रदाता जेपीए के रूप में EclipseLink का उपयोग कर EclipseLink

Connection con = entityManager.unwrap(Connection.class); 

द्वारा एक JDBC कनेक्शन प्राप्त कर सकते हैं लेकिन मैं अनिश्चित है कि मैं क्या कर रहा हूँ के लिए जिम्मेदार हूँ। क्या मुझे अपने प्रश्न सबमिट करने के बाद कनेक्शन बंद करना है? या मुझे कनेक्शन बंद करने की अनुमति नहीं है, क्योंकि EclipseLink भी आंतरिक रूप से इस कनेक्शन का उपयोग करता है। या यह परवाह नहीं करता है, क्योंकि EclipseLink मेरे व्यवहार को देखता है और अगर मैं ऐसा नहीं करता तो कनेक्शन स्वचालित रूप से बंद कर देता है?

+0

क्या यह जावा ईई या एसई है? – perissf

+0

सादा जावा एसई पर्यावरण। – user1494080

+0

आपको कनेक्शन की आवश्यकता क्यों है? जेपीए ज्यादातर स्थितियों में EntityManager का उपयोग करता है। संग्रहीत प्रक्रियाओं को कॉल करने के लिए – perissf

उत्तर

6

यदि आप जेपीए लेनदेन के संदर्भ में हैं तो कनेक्शन प्रदाता (ग्रहण लिंक) द्वारा प्रबंधित किया जाएगा। यदि आप एक लेनदेन के बाहर हैं तो आप कनेक्शन को प्रबंधित करने के लिए जिम्मेदार हैं।

अतिरिक्त जानकारी के लिए नीचे दिए गए लिंक देखें:

http://wiki.eclipse.org/EclipseLink/Examples/JPA/EMAPI#Getting_a_JDBC_Connection_from_an_EntityManager

+0

मुझे एक समस्या है। लेनदेन हमेशा परिवर्तन करता है, भले ही मैं इकाई प्रबंधक पर रोलबैक करूंगा। मैं इनफॉर्मिक्स डीबी और ifxjdbc ड्राइवर का उपयोग कर रहा हूँ। लेनदेन आवेदन प्रबंधित है। और दूसरी समस्या यह है कि eclipselink अनचाहे (java.sql.Connection) पर शून्य देता है। पुराने SGES2.1.1 के साथ eclipselink 2.5.1 का उपयोग करना। – dmatej

+0

हल: EclipseLink विकी गलत था लेकिन यह अनचाहे विधि सही है।मैंने आज एक्लीपसेलिंक की विकी तय की है। – dmatej

1

लेकिन मैं अनिश्चित है कि मैं क्या कर रहा हूँ के लिए जिम्मेदार हूँ। क्या मुझे अपने प्रश्न सबमिट करने के बाद कनेक्शन बंद करना है? या मुझे कनेक्शन को बंद करने की अनुमति नहीं है, क्योंकि EclipseLink भी इस कनेक्शन आंतरिक रूप से उपयोग करता है।

एक अच्छा और वैध प्रश्न। ऐसा लगता है कि प्रलेखन में unwrap() कॉल के अर्थशास्त्र की कमी है।

EclipseLink के बारे में , मैं क्या source से मिला से अनुसार:

EclipseLink आप वर्तमान में सक्रिय connection करने के लिए एक संदर्भ जिससे वह वर्तमान में सक्रिय ग्राहक सत्र लेन-देन के लिए उपयोग करता है देता है। यदि कोई लेनदेन सक्रिय नहीं है, तो नया सत्र बनाया जाएगा, सत्र से जुड़े और unwrap() विधि से लौटाया गया।

नतीजतन, आईएमएचओ, इस तरह के प्राप्त Connection के एक प्रतिबद्ध/रोलबैक को अपरिभाषित व्यवहार और/या अपवादों का कारण बन सकता है। डीएमएल को निष्पादित करने के लिए भी यही सच है, जिसने रिकॉर्ड्स को पहले ईक्लीपसेलिंक आंतरिक कैश द्वारा कैश किया था या जिसके लिए प्रबंधित इकाइयां मौजूद थीं।
तो इस एपीआई का उपयोग करते समय, विशेष रूप से यदि अंतर्निहित लेनदेन गंदा है, सावधान रहें

यदि आप आंतरिक ईक्लीपसेलिंक कक्षाओं का संदर्भ ले सकते हैं, तो आप विशेष रूप से Connection प्राप्त करने के लिए eclipselink आंतरिक कनेक्शन पूल तक पहुंच सकते हैं (org.eclipse.persistence.sessions.server.ServerSession.getConnectionPool(String) पर एक नज़र डालें)।

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