¿Qué es un pool de conexiones?

3092 vistas

Un pool de conexiones es un mecanismo que permite rehusar las conexiones creadas. En efecto, la creación sistemática de nuevas instancias de Connection puede llegar a ser muy pesada en consumo de recursos. Para evitar esto, el pool de conexiones no cierra la conexión después de la llamada al método close(). En lugar de cerrar directamente la conexión ésta es "devuelta" al pool pudiendo ser usada posteriormente.

La gestión del pool se hace en general de forma transparente por el usuario.



java
  1. // recuperación de un DataSource, normalmente mediante JNDI
  2. DataSource source =...;
  3. // recuperación de una conexión del pool
  4. Connection connection = source.getConnection("user", "password");
  5. // uso de la conexión
  6.  
  7. // ...
  8.  
  9. // "devolvemos" la conexión al pool, "cerrándola"
  10. connection.close();



Veamos algunas clases relacionadas a los pools de conexiones del paquete javax.sql:

  • ConnectionPoolDataSource: esta interfaz representa una fuente de datos gestionando los pools de conexiones.
  • PooledConnection: esta interfaz representa una conexión que pertenece a un pool.
  • ConnectionEventListener: este listener permite ponerse a la escucha de los eventos relativos a una PooledConnection. Se realiza una llamada al método connectionClosed(ConnectionEvent event) cuando se devuelve una conexión al pool. Se hace una llamada al método connectionErrorOccurred(ConnectionEvent event) cuando se produce un error en la conexión (por ejemplo, un fallo del servidor). El listener es "prioritario" a la aplicación (es decir, estos métodos se llamarán antes de que el driver informe a la aplicación de una SQLException).
  • ConnectionEvent: esta clase representa un evento del ConnectionEventListener. A partir de este evento, tenemos accesibles dos informaciones: la PooledConnection (fuente) y la SQLException, si existe.

Atención: ningún método de javax.sql devuelve de forma directa una ConnectionPoolDataSource. Para poder usar los métodos especificados de esta interfaz se tendrá que hacer el "casting" adecuado.

Ver los enlaces para ejemplos prácticos de creación y uso de un pool de conexiones.