Cierre de Pool de conexiones

joaquin_gsm
19 de Marzo del 2003
Hola,
En mi aplicación estoy utilizando las clases de Oracle para implementar un Pool de conexiones de con la siguiente clase:

**
* Precarga de los Pool de conexiones en la primera solicitud de conexión de cada perfil/rol.
*
*
*/
package seguridad;

import java.io.*; // Serializable
import java.util.*;
import java.sql.*;
import javax.sql.*; // PoolConnections
import oracle.jdbc.*;
import oracle.jdbc.pool.*;

/**
* Crea y gestiona los pools de conexiones contra Oracle
*/
public class ConexionPoolBean implements Serializable
{
Vector conexiones;
private final String usr_con = "USR_CON_SITRAP";
private final String clv_con = "xxx";
private String urlBBDD = "";

private OracleConnectionPoolDataSource ds_con;

private PooledConnection pool_con;

public ConexionPoolBean() {
ds_con = null;
pool_con = null;
}

public void crearPool( String bbdd) throws Exception {
urlBBDD = bbdd;
if (pool_con == null)
{
initFuentes(); // Creacción de las fuentes de datos
pool_con = ds_con.getPooledConnection();
}
}

// Invocado en la salida de la app
public void destruirPool() throws Exception {
// Si no ha conexiones activas
if (pool_con==null) {
pool_con.close();
}
}

public synchronized Connection getConexion(String tipo) {
Connection con = null;
try {
if (tipo.equals("CON")) con = (Connection) pool_con.getConnection();
else con = null;;
} catch(SQLException sqle) {}
catch(Exception e) {}
return con;
}

public synchronized void devolverConexion(Connection c) {
try {
c.close();
} catch(SQLException sqle) {}
}

public PooledConnection getPool_con(){ return pool_con; }

public void setPool_con(PooledConnection p){ pool_con = p; }

private void initFuentes(){
try {
ds_con = new OracleConnectionPoolDataSource();
ds_con.setURL(urlBBDD);
ds_con.setUser(usr_con);
ds_con.setPassword(clv_con);
} catch(SQLException sqle) {}
}
}



¿Hay alguna forma de cerrar el pool de conexiones (destruirPool) cuando el ultimo usuario que usa el aplicativo salga de la misma?
¿Con que evento podria detectarlo y así lanzar el cierre de los pools?

Gracias y un saludo,