अगर हम कोड में जावा जेडीबीसी कनेक्शन (ओरेकल कहें) को बंद करना भूल जाते हैं, तो जानना चाहेंगे कि क्या कनेक्शन डीबी एंड पर हमेशा के लिए रहता है (ओरेकल) या ओरेकल के पास कुछ समय बाद ऑटो रिलीज डीबी कनेक्शन के अंत में कोई कार्यान्वयन है?

try{
       ds.getConnection();
       //do some business logic

   }catch(Exception e){
       //handle exceptions

   }  finally{
           //let's say DB connection is NOT cosed..
      }

उपरोक्त कोड में खुले कनेक्शन का क्या होता है? जावा प्रोग्राम से बाहर निकलने के बाद क्या कनेक्शन डेटाबेस पक्ष पर स्वतः जारी हो जाता है? मैं समझता हूं कि डीबी कनेक्शन बंद न करने की अत्यधिक अनुशंसा नहीं की जाती है और यह खराब अभ्यास है। मैं सिर्फ निहितार्थ जानना चाहता हूं और समझना चाहता हूं कि कैसे ओरेकल अनजान कनेक्शन को संभालता है।

0
Stunner 19 फरवरी 2020, 05:23
1
Oracle में डेड कनेक्शन डिटेक्शन नामक एक विशेषता है जो रुचि की हो सकती है oracle .com/technetwork/database/enterprise-edition/…
 – 
Nathan Hughes
19 फरवरी 2020, 05:40
लिंक के लिए धन्यवाद @NathanHughes यह वास्तव में मेरे प्रश्न का उत्तर देता है ..
 – 
Stunner
19 फरवरी 2020, 06:41

1 उत्तर

एक बार वीएम समाप्त हो जाने के बाद, चाहे कमोबेश सामान्य रूप से (सभी गैर-डिमन थ्रेड समाप्त हो जाते हैं, System.exit लागू हो जाता है, या एक किल सिग्नल प्राप्त होता है, जैसे कि टर्मिनल में CTRL+C मारना), या असामान्य रूप से (आप एक से अधिक यात्रा करते हैं) पॉवरकॉर्ड, या टर्मिनेट सिग्नल कर्नेल को आपके वीएम से हार्ड-एग्जिट करने का कारण बनता है), सभी टीसीपी/आईपी कनेक्शन स्वचालित रूप से चले जाते हैं, और इसके साथ, कनेक्शन साफ ​​हो जाता है।

लेकिन, जब तक VM बाहर नहीं निकलता, आपको कोई गारंटी नहीं मिलती। व्यवहार जानबूझकर अनिर्दिष्ट है (जैसा कि, आपको उन्हें स्वयं बंद करना होगा। यदि आप नहीं करते हैं, तो कोई गारंटी प्रदान नहीं की जाती है), और वास्तव में क्या होता है यह आपके कंप्यूटर की स्थिति पर निर्भर करता है (क्योंकि यह जीसी रन पर निर्भर करता है और जब वे चलते हैं पर निर्भर करता है आपके म्यूजिक प्लेयर में कौन सा गाना बज रहा है से लेकर चांद के चरण तक), और JDBC ड्राइवर का इस्तेमाल किया जा रहा है।

आप यह पहचानने के लिए लिंट टूल और आईडीई प्लग इन का उपयोग कर सकते हैं कि आप अपने कनेक्शन बंद नहीं कर रहे हैं। साथ ही, आपका स्निपेट 10 वर्ष से अधिक पुराना है। यह सुनिश्चित करने के लिए अनुशंसित और बहुत आसान तरीका है कि आपका कनेक्शन आप पर न पड़े: का उपयोग करना है:

try (Connection con = ds.getConnection()) {
    // use 'con' here
} // no need for a catch or finally.

या, JDBC को कम कष्टप्रद बनाने के लिए एक अमूर्त के साथ कनेक्शन पूलर्स (जैसे HikariCP) का उपयोग करें, जैसे JDBI या JOOQ।

1
rzwitserloot 19 फरवरी 2020, 05:30
उत्तर देने के प्रयास के लिए धन्यवाद .. मैंने विशेष रूप से पूछा कि कैसे ऑरैकल मृत कनेक्शन को संभालता है। मैं संसाधन ब्लॉक के साथ उन्नत प्रयास के बारे में जानता हूं। ऐसा कहकर, टिप्पणी में लिंक देखें, नाथन ने यह जानने के लिए प्रेरित किया कि ऑरैकल मृत कनेक्शन को कैसे संभालता है। धन्यवाद
 – 
Stunner
19 फरवरी 2020, 06:44