2011-02-25 8 views
7

था मैं जावा SE6 प्रलेखन संदर्भ और InitialContext पर जल्दी ही में देखा, मैंने देखा है होता है कि वहाँ प्रत्येक के लिए एक close() विधि।संदर्भ और प्रारंभिक कॉन्टेक्स्ट - क्या मुझे इन वस्तुओं पर नज़दीकी() विधि को कॉल करना चाहिए?

तो अब मुझे आश्चर्य है, क्या मुझे संदर्भ/प्रारंभिक कॉन्टेक्स्ट ऑब्जेक्ट्स पर close() विधि को कॉल करने की आवश्यकता है?

यहां मेरे सामान्य सर्वलेट कोड का एक स्निपेट है और संदर्भ/प्रारंभिक कॉन्टेक्स्ट ऑब्जेक्ट का उपयोग कैसे किया जाता है।

public class MyTypicalServlet extends HttpServlet {  

    //thread safe 
    DataSource ds; 
    String FilePath;  

public void init(ServletConfig config) throws ServletException { 

    super.init(config); 
    try { 
     final Context ctx = new InitialContext(); 
     ds = (DataSource) ctx.lookup("java:comp/env/jdbc/myDB"); 

     FilePath = getServletContext().getInitParameter("FilePath");     

    } catch (NamingException e) { 
     throw new ServletException("Unable to find datasource: " + e.getMessage(), e); 
    } 
}    

    public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException 
    { 
     doPost(req,res); 
    } 

    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException 
    {  

    //...a bunch of code 
    } 

}//class   
+0

मैं कहते हैं 'पास()' लेकिन व्यावहारिक रूप से कोई impl। कुछ भी करता है क्योंकि आपके पास सबकॉन्टेक्स और अन्य हो सकते हैं। – bestsss

उत्तर

6

यह पाने के लिए एक अच्छी आदत है। उदाहरण के लिए, मैं हमेशा अपने इनपुटस्ट्रीम कक्षाओं को बंद करना सुनिश्चित करता हूं, भले ही मैं एक ByteArrayInputStream का उपयोग कर रहा हूं, जहां क्लोज़() विधि नो-ऑप है। इस तरह, अगर मैं इसे बाद में कुछ अन्य कार्यान्वयन में बदलता हूं, तो इसे बदलने के लिए भी एक कम चीज़ है।

ही यहां मामला - अगर आप फोन करीब(), आप किसी भी JNDI कार्यान्वयन के साथ संगत हो जाएगा।

7

करीबी विधि जीसी को जारी करने के इंतजार के बजाय संदर्भ द्वारा उपयोग किए जाने वाले संसाधनों को जारी करने की अनुमति देती है। यह संभवतः एक खुला कनेक्शन की आवश्यकता वाले संदर्भ के लिए उपयोगी होगा, उदाहरण के लिए, डेटाबेस या बाहरी सिस्टम। लेकिन मुझे यकीन है कि यह जावा के लिए उपयोगी नहीं है: comp/env संदर्भ। वैसे भी, मैंने कभी भी उन्हें बंद करने वाला कोई कोड नहीं देखा है।

+0

चूंकि मैं संदर्भ के साथ अपने डेटाबेस से कनेक्शन खोल रहा हूं, क्या मुझे संदर्भ पर क्लोज़() का उपयोग करना चाहिए? ... क्या यह मेरे लिए कोई लाभ होगा? मैं अपने वेबपैप के लिए काफी स्मृति का उपयोग करता हूं, इसलिए मुझे आश्चर्य है कि ऑब्जेक्ट्स को जारी करने के बाद जल्द ही बनाम जीसी के लिए इंतजार करना मेरे लिए उपयोग किया जाएगा। इस पर आपके विचार क्या हैं? – katura

+0

आप संदर्भ के साथ अपने डेटाबेस से कनेक्शन नहीं खोल रहे हैं। आपको डेटासोर्स तक पहुंच प्राप्त होती है, जो आपको आपके द्वारा खोले गए कनेक्शन तक पहुंच प्रदान करती है। कनेक्शन संदर्भ को नहीं जानता है और इसके साथ कुछ लेना देना नहीं है। संदर्भ को बंद करना एक अच्छा अभ्यास है, लेकिन इस मामले में मुझे इसके बारे में बहुत कुछ नहीं लगेगा। –

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

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