हमें पुराने कोड में एक बग मिला है जहां कनेक्शन बंद नहीं किए जा रहे हैं। यह एक आसान फिक्स है, लेकिन मैं सोच रहा हूं कि हम यह साबित करने के लिए कैसे जाते हैं कि यह तय है। कनेक्शन पूल का उपयोग करने का विकल्प है या नहीं। पूलिंग के उपयोग के लिए पूल के लिए निगरानी जोड़ना आसान होगा, लेकिन जब कनेक्शन पूलिंग का उपयोग नहीं किया जाता है, तो हम उन अनजान, अनाथ कनेक्शन को कैसे ट्रैक करते हैं? क्या यह किसी भी अन्य स्मृति रिसाव की तरह है?मैं अनाथ जेडीबीसी कनेक्शन को कैसे ट्रैक करूं जो बंद नहीं हैं?
बग मूल रूप से एक कट और पेस्ट त्रुटि की तरह दिखता है। हम कुछ वर्गों है कि डीबी कनेक्शन का प्रबंधन है, तो यह इस तरह मोटे तौर पर दिखता है:
OurDBConn conn1 = ConnectionManager.getConnection();
try {
// business logic
} catch() {
//
} finally {
ConnectionManager.returnConnection(conn1);
}
/// and then later in the same method
OurDBConn conn2 = ConnectionManager.getConnection();
try {
// business logic
} catch() {
//
} finally {
ConnectionManager.returnConnection(conn1); // NOTE Error: conn1 should be conn2
}
मैं क्यों पहले कोडर सिर्फ मूल कनेक्शन पुन: उपयोग नहीं किया था पता नहीं है, लेकिन यह है कि क्या यह
है(संपादित करें/संलग्न करें)
हां, कनेक्शन कोड भी हमारा है और इसलिए मैं दिए गए उत्तरों का उपयोग कर सकता हूं।
हालांकि, मुझे नहीं लगता कि मैंने सही सवाल पूछा है, हालांकि नीचे दिए गए उत्तरों का जवाब मैंने पूछा है। मुझे यकीन नहीं है कि सही स्टैक ओवरफ्लो क्या करना है; एक और सवाल पूछें, या इसे संपादित करें?
मुझे एक प्रश्न पूछा जाना चाहिए था: इन अनाथ, अन-बंद कनेक्शन सिस्टम प्रदर्शन में खुद को कैसे प्रकट करेंगे? साथ ही, चूंकि ये कनेक्शन ऑब्जेक्ट केवल एक निश्चित विधि के दायरे में मौजूद हैं, तो कनेक्शन कचरा संग्रहण के लिए योग्य नहीं होंगे? और फिर यदि वे gceded हैं, तो खुले कनेक्शन का प्रभाव gc'ed क्या है?
(अंत संपादित करें)
मैं इसे एक करीबी देख रहा हूं, हमारी कई परियोजनाओं में हमें एक जैसी ही समस्या है। – Tenner
रिकॉर्ड के लिए, मुझे वास्तव में एक अच्छा कारण होना चाहिए कि इसे परिपक्व कनेक्शन पूल कार्यान्वयन जैसे डीबीसीपी या सी 3 पीओ में स्थानांतरित न करें - यदि आपके पास अवसर है - शायद आपको ऐसा करने पर विचार करना चाहिए? एओपी दृष्टिकोण – teabot