Nuestra sección de código estándar para usar JDBC es ...
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();
Pregunta 1: Al usar el grupo de conexiones, ¿se debe cerrar la conexión al final? Si es así, ¿no se pierde el propósito de la agrupación? Y si no es así, ¿cómo sabe el origen de datos cuándo se libera una instancia particular de Connection y se puede reutilizar? Estoy un poco confundido en este caso, se agradecen los consejos.
Pregunta 2: ¿El siguiente método se acerca al estándar? Parece un intento de obtener una conexión desde el grupo, y si no se puede establecer DataSource, use el DriverManager antiguo. Ni siquiera estamos seguros de qué parte se está ejecutando en tiempo de ejecución. Repitiendo la pregunta anterior, ¿debería uno cerrar la conexión que surge de dicho método?
Gracias, - 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);
}
Editar: creo que estamos obteniendo la conexión agrupada ya que no vemos un seguimiento de pila.