Pool de conexiones, 驴d贸nde instanciarlo?

patrif
15 de Abril del 2005
Hola a todos, estoy con una aplicaci贸n web que actualmente abre y cierra una conexi贸n a BD cada vez que es necesario. Quiero modificar esto, porque es muy lento u adem谩s genera problemas de memoria en partes de la aplicaci贸n que son muy pesadas, por un pool de conexiones, que mejora la eficiencia.

El problema est谩 a la hora de hacer que est茅 disponible para todas los usuarios que visiten la web.

驴D贸nde tiene que instanciarse para que esto sea posible?

Porque, sino se instancia en un servlet o jsp, se crear谩 en ese momento y en cuanto se acabe esa p谩gina dejar谩 de estar disponible, 驴no?

C贸mo podeis ver, necesito algo de ayuda porque estoy muy perdida con esto.

Gracias a todos y un saludo.

Ken
15 de Abril del 2005
Un pool de conexiones no es una clase que uno instancia y hace disponible...

Se configura en el server.xml, dentro de la definici贸n de un contexto (aunque puede haberlos gen茅ricos). T煤 configuras un DataSource para el pool de conexiones de modo que todo aquel que quiera, puede sacar una conexi贸n del pool y usarla.

El proceso es el siguiente:

El contenedor (Tomcat o el que sea) configura el pool de conexiones al vuelo al arrancar el contexto. Supongamos que lo hemos definido para 30 conexiones... pues esas 30 conexiones est谩n ya "en el aire" para que si alguien quiere conexi贸n a la Base de Datos, se la pida al Pool y 茅l le de la que sea de esas 30.

Cuando el cliente ha acabado con la conexi贸n (se termina de procesar la petici贸n del servlet, por ejemplo) cuando el cliente (que en este caso, recordemos, es el propio servlet el que es cliente del Pool) har铆a "conexion.close()".
Este m茅todo es distinto para una conexi贸n de pool (PoolableConnection) ya que en lugar de cerrarla, lo que hace es enviarla de vuelta al pool para su reutilizaci贸n.

El DataSource del Pool y c贸mo pedirle la conexi贸n se suele implementar con JNDI. Hay un cap铆tulo dedicado a esto en la documentaci贸n de Tomcat, pero lo puedes mirar porque es com煤n a casi todos los contenedores.

ADVERTENCIA: Usando conexiones de Pool corres el riesgo de dejarte conexiones abiertas. Hay par谩metros que fuerzas las conexiones abandonadas a volver al pool, pero como siempre, lo mejor es ir con cuidado. Recomendaciones: Cierra SIEMPRE los ResultSets, los Statements y los Connection que uses. SIEMPRE...

Un saludo, ya nos contar谩s...

Ken