pool conexiones

15
Pool de Conexiones

Upload: qarloz-pato

Post on 29-Dec-2014

61 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Pool Conexiones

Pool de Conexiones

Page 2: Pool Conexiones

JDBC

Las conexiones a cualquier medio ( base de datos relacional, sistemas legacy, etc. ) son un recurso caro. Normalmente existe un número limitado de conexiones que puede mantener abiertas un determinado servidor, dependiendo de su memoria, su potencia, del sistema al que estamos accediendo, etc.

Page 3: Pool Conexiones

Conexiones a Bases de Datos con JDBC

3

Driver Manager Connection Statement ResultSetPrograma

Cargar Driver

Abrir conexión

Obtener objeto Statement

Ejecutar sentencias

Manejar resultados

Cerrar conexión

Cerrar objeto Statement

Page 4: Pool Conexiones

Pool de Conexiones

Muchos sistemas que actúan como servidores necesitan mantener una gran escalabilidad y por lo tanto no pueden arriesgarse a que se agoten las conexiones. ¿Qué se puede hacer?

Un pool de conexiones soluciona esta problemática. Se trata de un conjunto limitado de conexiones que se reutilizan constantemente para dar servicio a los diferentes clientes.

De este modo se aumenta la escalabilidad y también el rendimiento ya que no sería necesario abrir las conexiones constantemente.

Page 5: Pool Conexiones

Pool de Conexiones

Normalmente un pool de conexiones se inicializa con un número de conexiones determinado. Casi todos los servidores modernos traen normalmente pools de conexiones integrados. En un pool de conexiones cada una de estas es utilizada por múltiples clientes diferentes. Los clientes abren la conexión, acceden al servicio a través de ella y por último cierran dicha conexión. Es importante que el cliente abra y cierre la conexión en cada acceso al servicio ya que si no la cerrase no la estaría devolviendo al pool y por lo tanto correríamos el riesgo de agotar los recursos del servidor.

Page 6: Pool Conexiones

Pool de Conexiones

El estado inicial de un Pool de conexiones consiste en crear las conexiones físicas iniciales

Page 7: Pool Conexiones

Pool de Conexiones

Cuando un Objeto Java del Servidor Java EE 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.

Page 8: Pool Conexiones

Pool de Conexiones

Page 9: Pool Conexiones

Pool de Conexiones

Cuando un Objeto Java del Servidor Java EE 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.

Page 10: Pool Conexiones

Configuración de context.xml(Carpeta ‘conf’ de Tomcat)

Page 11: Pool Conexiones

Configuración de context.xml

<Resource name="jdbc/DBTest" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username=“root" password="avantasia" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test"/>

Page 12: Pool Conexiones

Configuración de server.xml

driverClassName. Nombre calificado de la clase Java del driver JDBC a utilizar

username. El usuario a pasar al driver JDBC para establecer la conexión.

password. La contraseña pasar al driver JDBC para establecer la conexión.

url. La URL a pasar al driver JDBC para establecer la conexión.

initialSize. Número inicial de conexiones que creará el pool al arrancar. Por defecto es 0. No se recomienda inicializar este número muy elevado.

maxActive. Número máximo de conexiones activas que puede albergar el pool al mismo tiempo, 0 si no se quiere limitar este número. El número más alto que puede tener esta propiedad será el número total de conexiones que permita nuestro repositorio de base de datos.

maxIdle. Número máximo de conexiones activas que pueden permanecer en el pool en estado idle, sin contar las que están siendo liberadas en ese momento, 0 si no se quiere limitar este número.

minIdle. Número mínimo de conexiones activas que pueden permanecer en el pool en estado idle, sin contar las que están siendo creadas en ese momento, 0 para no permitir ninguna.

Page 13: Pool Conexiones

Configuración de webt.xml de la aplicación

<resource-ref> <description>MySQL Connections</description> <res-ref-name>jdbc/Libreria</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth></resource-ref>

Page 14: Pool Conexiones

Uso del Pool

Nota: deben importarse los paquetes: javax.sql y javax.naming

Page 15: Pool Conexiones

Ventajas

Resultado de un análisis realizado (www.adictosaltrabajo.com)

Para el mismo intervalo de tiempo, un servlet, al usar del pool ha sido capaz de atender 30727 peticiones mientras que sin el pool apenas fue capaz de atender 630 peticiones.

En media, el servlet, al usar el pool a logrado atender las peticiones en 1 milisegundo, mientras que sin el uso del pool este tiempo se incrementa a 79 milisegundos.

El rendimiento del servlet, al usar el pool ha sido de 6138 peticiones por segundo, mientras que sin el Pool decrece drásticamente a 124 peticiones por segundo.