Hola Luz,
Si la conexión a la Base de Datos la estas realizando a través de la Clase
javax.sql.DataSource es perfectamente correcto que subas y bajes la conexión cada vez que realizas una conexión.
Una aplicación Web que accede a un
RDBMS (
Relational DataBase Management System) remoto establece una conexión física con una BDS. El establecimiento de dicha conexión consume varios recursos como CPU, memoria y un tiempo muy valioso en el momento que el usuario está interactuando con la BDS.
Una aplicación Web realiza un servicio para varios clientes, si el Sitio Web tiene un nivel de impactos relativamente alto es evidente que una sola conexión con la BDS no es suficiente porque mientras un usuario la está utilizando, pueden haber otros usuarios que estén esperando dicha conexión.
Si queremos que un Sitio Web pueda crear más de una conexión a una misma BDS, lo tendremos que hacer nosotros mismos creando y destruyendo conexiones físicas a la BDS. Esto tiene varios inconvenientes
- en vez de dedicarnos al desarrollo de la lógica de negocio, nos tenemos que involucrar en detalles de bajo nivel de programación de Bases de Datos
- cada nueva conexión como se ha mencionado anteriormente consume varios recursos
Para solventar estos inconvenientes la
versión 3.0 de JDBC nos ofrece un
Pool de conexiones o
Reserva de conexiones que funciona de forma transparente y no crea un coste adicional a nuestras aplicaciones Web.
Al levantar un Servidor J2EE, automáticamente el Pool de conexiones crea un número de conexiones físicas iniciales.
Cuando un objeto Java del Servidor J2EE requiere una conexión a través del método
dataSource.getConnection(), la fuente de datos
javax.sql.DataSource habla con el Pool de conexiones y éste le entrega una conexión lógica
java.sql.Connection. Esta conexión lógica finalmente es recibida por el objeto Java.
Cuando un objeto Java del Servidor J2EE desea cerrar una conexión a través del método
connection.close(), la fuente de datos
javax.sql.DataSource habla con el Pool de conexiones y le devuelve la conexión lógica en cuestión.
Si hay una punta de conexiones a la BDS, el Pool de conexiones de forma transparente crea más conexiones físicas de objetos tipo
Connection. Si por el contrario las conexiones a la BDS bajan, el Pool de conexiones de forma transparente elimina conexiones físicas de objetos de tipo
Connection.
Este es el código básico para conectarnos a una BDS con un Pool de conexiones transparente a través de JNDI
javax.naming.Context ctx = new InitialContext(); dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/Bds1");
Cada vez que necesitamos realizar una operación tendremos que escribir el siguiente código para obtener una conexión lógica
connection = dataSource.getConnection();
Cuando hayamos finalizado la operación entonces cerraremos la conexión lógica con el siguiente código
connection.close();
Para ver imágenes del mecanismo del pool de conexiones y algún detalle sobre las versiones JDBC que soportan esta tecnología puedes visitar la siguiente dirección achetetep://3w.infosintesis.net/apensintesis/bds/jdbc/poolconexiones
Saludos
Ignasi Pérez Valls infosintesisblog.net