La nostra sezione di codice standard per l'utilizzo di JDBC è ...
Connection conn = getConnection(...);
Statement stmt = conn.conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rset = stmt.executeQuery (sqlQuery);
// do stuff with rset
rset.close(); stmt.close(); conn.close();
Domanda 1: quando si utilizza Connection Pool, è necessario chiudere la connessione alla fine? Se è così, lo scopo del pooling non è perso? E se no, come fa DataSource a sapere quando una particolare istanza di Connection viene liberata e può essere riutilizzata? Sono un po 'confuso su questo, eventuali suggerimenti sono stati apprezzati.
Domanda 2: il seguente metodo è vicino allo standard? Sembra un tentativo di ottenere una connessione dal pool e, se non è possibile stabilire DataSource, utilizzare il vecchio DriverManager. Non siamo nemmeno sicuri di quale parte venga eseguita in fase di esecuzione. Ripetendo la domanda precedente, si dovrebbe chiudere la connessione che esce da un tale metodo?
Grazie, - MS.
synchronized public Connection getConnection (boolean pooledConnection)
throws SQLException {
if (pooledConnection) {
if (ds == null) {
try {
Context envCtx = (Context)
new InitialContext().lookup("java:comp/env");
ds = (DataSource) envCtx.lookup("jdbc/NamedInTomcat");
return ds.getConnection();
} catch (NamingException e) {
e.printStackTrace();
}}
return (ds == null) ? getConnection (false) : ds.getConnection();
}
return DriverManager.getConnection(
"jdbc:mysql://"+ipaddy+":"+dbPort +"/" + dbName, uName, pWord);
}
Modifica: penso che stiamo ottenendo la connessione in pool poiché non vediamo una traccia dello stack.