पर परिणामसेट बनाए रखते हैं यदि हम एक (मूल) DataSource
(यानी: एक कनेक्शन पूलिंग नहीं करता है) मानते हैं, तो आप एक भौतिक कनेक्शन प्राप्त करते हैं जो DriverManager
से प्राप्त होता है ड्राइवर भी आंतरिक रूप से DataSource से DriverManager का उपयोग करते हैं, या DriverManager से डेटासोर्स)। तो वे कनेक्शन समान व्यवहार करेंगे।
अब अगर हम DataSource
मानते हैं जो कनेक्शन पूलिंग प्रदान करता है, तो 0Sप्राप्त करने के लिए डेटासोर्स स्वयं ConnectionPoolDataSource
(या एक समान आंतरिक तंत्र) का उपयोग करता है। यह PooledConnection डेटाबेस के वास्तविक भौतिक कनेक्शन का प्रबंधन करता है।
जब कोई उपयोगकर्ता डेटासोर्स से कनेक्शन का अनुरोध करता है, तो डेटासोर्स पूल किए गए कनेक्शन को चेकआउट करेगा, और इसे Connection
के लिए पूछेगा। PooledConnection तब एक लॉजिकल कनेक्शन बनाएगा जो भौतिक कनेक्शन का उपयोग करता है या लपेटता है (उदाहरण के लिए प्रॉक्सी का उपयोग करना)। डेटासोर्स उपयोगकर्ता को उस लॉजिकल कनेक्शन को वापस कर देगा।
उपयोगकर्ता को तार्किक कनेक्शन सभी पहलुओं में भौतिक कनेक्शन के समान व्यवहार करना चाहिए। तो जब कोई उपयोगकर्ता कनेक्शन बंद कर देता है, तो वह तार्किक कनेक्शन और सभी आश्रित जेडीबीसी ऑब्जेक्ट बंद हो जाएंगे और भौतिक कनेक्शन के करीब व्यवहार करेंगे।
JDBC 4.1 खंड 11.1 का कहना है:
कनेक्शन पूलिंग पूरी तरह से ग्राहक के लिए पारदर्शी है: एक ग्राहक एक जमा कनेक्शन प्राप्त और यह सिर्फ एक ही तरह से यह प्राप्त उपयोग करता है और एक गैर pooled कनेक्शन का उपयोग करता है।
और खंड 11.4:
आवेदन तार्किक संभाल का पुन: उपयोग करने का प्रयास है, तो कनेक्शन कार्यान्वयन एक SQLException फेंकता है।
और
एक दिया PooledConnection वस्तु के लिए, केवल सबसे हाल ही में उत्पादित तार्किक कनेक्शन वस्तु मान्य होगा। संबंधित PooledConnection.getConnection विधि को कॉल किए जाने पर पहले से मौजूद किसी मौजूदा कनेक्शन ऑब्जेक्ट को स्वचालित रूप से बंद कर दिया जाता है।
पृष्ठभूमि तथापि, जब तार्किक कनेक्शन बंद कर दिया जाता है, PooledConnection डेटा स्रोत है कि यह पुन: उपयोग के लिए उपलब्ध है संकेत जाएगा, और डेटा स्रोत तो कनेक्शन पूल में वापस, या PooledConnection बंद हो जाएगा में (जो बंद हो जाता है भौतिक कनेक्शन) अगर इसे अब कनेक्शन की आवश्यकता नहीं है।
डेटासॉर्स लॉजिकल कनेक्शन को बंद करने के लिए PooledConnection से पूछकर, उपयोगकर्ता से एक कनेक्शन को मजबूती से निरस्त कर सकता है (उदाहरण के लिए जब कनेक्शन बहुत लंबे समय तक चेक किया जाता है)।
मेरे आवेदन में, मैं अपनी 'कनेक्शन' ऑब्जेक्ट को बंद करने के बाद भी अपने 'परिणामसेट' ऑब्जेक्ट तक पहुंचने में सक्षम हूं। तो आपके अनुसार, वेबस्फीयर इस कार्यान्वयन में विफल रहा है? – Sriram
यह उस चीज़ पर निर्भर करता है जिसका उपयोग आप पहुंच के साथ करते हैं। परिणामसेट ऑब्जेक्ट अभी भी मौजूद होगा, लेकिन आपको परिणामसेट का उपयोग करने में सक्षम नहीं होना चाहिए क्योंकि लॉजिकल कनेक्शन बंद होने पर इसे बंद कर दिया जाना चाहिए था। –
और यदि यह वेबस्पेयर का गलत कार्यान्वयन है: यह उस वेबपृष्ठ के 'डेटासोर्स' के लिए 'कनेक्शन पुलडेटा स्रोत' के रूप में उपयोग करने पर निर्भर करता है। वर्णित व्यवहार को 'पूलड कनेक्शन' कार्यान्वयन द्वारा लागू किया जाना चाहिए। –