में डेटास्रोत इंजेक्शन जब आप अपने आवेदन में डेटास्रोत इंजेक्ट करते हैं और उस पर getConnection()
का आह्वान करके कनेक्शन प्राप्त करते हैं, तो क्या आप कनेक्शन बंद करना चाहते हैं?ईजेबी
Q
ईजेबी
14
A
उत्तर
17
हालांकि डेटा स्रोत ही कंटेनर में कामयाब रहे है, एपीआई वास्तव में कनेक्शन बंद करने के लिए प्रोग्रामर की आवश्यकता है। यह कुछ अन्य कंटेनर प्रबंधित संसाधनों (इकाई प्रबंधक की तरह) से अलग है, जहां कंटेनर बंद होने का ख्याल रखता है। ध्यान दें कि अधिकांश मामलों में यहां बंद होने पर वास्तव में कनेक्शन बंद कर देता है, लेकिन कनेक्शन पूल से कनेक्शन लौटाता है।
अंगूठे के नियम के रूप में, यदि आप एक या अधिक संसाधनों को बंद करने के लिए कारखाने-ईश संसाधनों का उपयोग बंद कर सकते हैं, तो आपको उन्हें बंद करना होगा। अन्यथा कंटेनर यह करता है।
Connection औजार के बाद से AutoCloseable, तो आप इस के लिए एक कोशिश के साथ-संसाधनों ब्लॉक का उपयोग कर सकते हैं:
@Stateless
public class MyBean {
@Resource(lookup = "java:/app/datasource")
private DataSource dataSource;
public void doStuff() {
try (Connection connection = dataSource.getConnection()) {
// Work with connection here
} catch (SQLException e) {
throw new SomeRuntimeException(e);
}
}
}
5
बेशक, अन्यथा आप अपने कनेक्शन पूल को समाप्त कर देंगे। यह अंत में ब्लॉक में यह करने के लिए सबसे अच्छा है:
@Resource(mappedName="jndi/yourDatasource")
DataSource ds;
..
Connection conn = null;
try {
conn = ds.getConnection();
//PERFORM QUERY, ETC..
}
catch(SQLException ex) {
//EXCEPTION HANDLING
}
finally {
try {
if(conn != null)
conn.close();
}
catch(SQLException ex) {..}
}
हाँ आप कनेक्शन जो कनेक्शन वापस पूल करने के लिए जारी करेंगे बंद करने के लिए की जरूरत है। – dinukadev
आप getConnection का उपयोग क्यों करना चाहते हैं और PersistenceContext को इंजेक्शन नहीं दे रहे हैं? – perissf