Conexiones a BDS a través de un Pool de conexiones transparente
Tengo un sistemita orientado a la Web en Java pero la conexión a la Base de Datos la subo y la bajo cada vez que realizo una operación pero me dijeron que eso no era correcto que debía mantener una conexión persistente en la Base de Datos, suena bastante lógico pero la verdad es que no sé como hacer eso, alguien podría orientarme un poco??
Respuesta
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) 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
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(); |
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 el siguiente apéndice apendice/bds/jdbc/poolconexiones/index.html