01 Manejo del pool de conexiones PDF

Title 01 Manejo del pool de conexiones
Author Anonymous User
Course Tecnicas De Programacion
Institution Universidad San Pedro
Pages 5
File Size 391.9 KB
File Type PDF
Total Downloads 88
Total Views 148

Summary

Programacion...


Description

Manejo del pool de conexiones Descripción Un pool de conexiones es un conjunto limitado de conexiones a una base de datos, que es manejado por un servidor de aplicaciones de forma tal, que dichas conexiones pueden ser reutilizadas por los diferentes usuarios. Este pool es administrado por un servidor de aplicaciones que va asignando las conexiones a medida que los clientes van solicitando consultas o actualizaciones de datos. Cuando nuestra aplicación trabaja con bases de datos, lo que se realiza básicamente es obtener una conexión, realizar consultas o operaciones SQL y por último cerrar la conexión. El problema estriba en que las conexiones a bases de datos son limitadas en número y además suponen un coste de procesador abrirlas y cerrarlas. Se puede evitar este sobre coste manteniendo conexiones persistentes, pero supone un gran problema para las aplicaciones web que trabajan con múltiples usuarios en un mismo instante. Ya que podemos saturar al servidor de bases de datos. La cantidad de conexiones abiertas a una base de datos es limitada, dado que consumen muchos recursos del servidor de base de datos, y se requiere memoria y tiempo del procesador por cada nueva conexión. El pool lo que hace es mantener y gestionar un número de conexiones físicas, que se irán reutilizando automáticamente para aumentar la eficiencia. De esta forma cuando creamos una nueva conexión desde nuestra aplicación, lo que obtenemos es una conexión lógica gestionada por el pool, y al cerrarla lo que hacemos es devolverla a dicho pool. A su vez el pool es capaz de ofrecer múltiples conexiones lógicas utilizando un reducido número de conexiones reales. El manejo de un pool favorece la escalabilidad y el rendimiento de una aplicación.

Proceso básico de funcionamiento de un pool de conexiones Los pasos siguientes describen cómo obtener una conexión de un UCP (unidad central de proceso) sobre un pool de conexiones JDBC habilitado fuente de datos para poder acceder a una base de datos. •

Se usa la UCP para la fábrica de origen de datos JDBC (oracle.ucp.jdbc.PoolDataSourceFactory) para obtener una instancia del pool habilitada para el origen de datos utilizando el método de getPoolDataSource. La instancia de origen de datos debe ser del tipo de PoolDataSource. Por ejemplo:

PoolDataSource PDS = PoolDataSourceFactory.getPoolDataSource (); •

Se establecen las propiedades de conexión que se requieren para obtener una conexión física a una base de datos. Estas propiedades se establecen en la instancia de origen de datos, e incluyen: la dirección, el nombre de usuario y contraseña para conectarse a la base de datos y la factoría de conexión utilizado para obtener la conexión física. Estas propiedades son específicas de un controlador JDBC y la base de datos. Por ejemplo:

pds.setConnectionFactoryClassName ( "oracle.jdbc.pool.OracleDataSource"); pds.setURL ( "jdbc: oracle: thin: @ / / localhost: 1521/XE"); pds.setUser ( ""); pds.setPassword ( ""); •

Establezca todas las propiedades del pool con el fin de anular el comportamiento predeterminado del grupo de conexión. Las propiedades del pool se establecen en la instancia de origen de datos. Por ejemplo:

pds.setInitialPoolSize (5);



Obtener una conexión utilizando la instancia de origen de datos. La conexión devuelta es una consecuencia lógica de manejar a una conexión física en el pool de la conexión de la fuente de datos. Por ejemplo:

Connection conn = pds.getConnection (); •

Utilice la conexión para realizar un trabajo sobre la base de datos:

Statement stmt = conn.createStatement (); stmt.execute ( "SELECT * FROM foo"); •

Cerrar la conexión y regresar al pool.

conn.close ();

Buenas prácticas y recomendaciones de uso A continuación, se proporcionan una serie de recomendaciones para configurar las propiedades de agrupación de conexiones con el fin de optimizar la puesta en común de comportamiento. Tras su creación, los conjuntos de conexiones JDBC son preconfigurados con la configuración por defecto. La configuración por defecto proporciona un aspecto general al pool de conexión. Sin embargo, las diferentes aplicaciones pueden tener requisitos de conexión de bases de datos diferentes y puede que desee modificar el comportamiento predeterminado de la agrupación de conexiones. Comportamientos, como el tamaño del pool y tiempos de espera de conexión se pueden configurar y puede mejorar el desempeño general del grupo de conexión, así como la disponibilidad de conexión. En muchos casos, la mejor forma de afinar un pool de conexiones para una aplicación específica es intentar diferentes combinaciones de las propiedades utilizando diferentes valores hasta conseguir un rendimiento óptimo

Propiedades de configuración del Pool de Conexión Las propiedades del pool de conexión se establecen ya sea al obtener una conexión a través de un pool habilitada para datos de origen o cuando se crea una agrupación de conexiones utilizando el administrador del pool de conexión. El siguiente ejemplo muestra cómo establecer las propiedades de agrupación de conexiones a través de un pool habilitado para origen de datos:

PoolDataSource

pds = PoolDataSourceFactory.getPoolDataSource();

PoolDataSource PDS = PoolDataSourceFactory.getPoolDataSource (); pds.setConnectionPoolName("JDBC_UCP"); pds.setConnectionPoolName ( "JDBC_UCP"); pds.setMinPoolSize(4);pds.setMaxPoolSize(20); pds.setMinPoolSize (4); pds.setMaxPoolSize (20); ... ... El siguiente ejemplo muestra cómo establecer las propiedades de agrupación de conexiones cuando se crea una agrupación de conexiones con el gestor de la agrupación de conexión:

UniversalConnectionPoolManager mgr = UniversalConnectionPoolManagerImpl. Gestor UniversalConnectionPoolManager = UniversalConnectionPoolManagerImpl. getUniversalConnectionPoolManager(); getUniversalConnectionPoolManager (); pds.setConnectionPoolName("JDBC_UCP"); pds.setConnectionPoolName ( "JDBC_UCP"); pds.setMinPoolSize(4);pds.setMaxPoolSize(20); pds.setMinPoolSize (4); pds.setMaxPoolSize (20); ... ...

mgr.createConnectionPool(pds); mgr.createConnectionPool (PDS);

Las propiedades del pool de conexiones se pueden establecer en cualquier orden y se puede cambiar dinámicamente en tiempo de ejecución. Por ejemplo, setMaxPoolSize podría cambiar después de que el pool se ha creado y el pool reconoce el nuevo valor y se adapta en consecuencia.

Controlar el tamaño del Pool Los conjuntos de conexiones JDBC incluyen un conjunto de propiedades que se utilizan para controlar el tamaño del pool. Se permite que el número de conexiones en el pool sea dinámico para aumentar y disminuir a medida que aumenta la demanda y disminuye. Este comportamiento dinámico ayuda a conservar los recursos del sistema que en otro caso se pierden en el mantenimiento de las conexiones innecesarias.

Ajuste el tamaño del grupo inicial El tamaño del grupo inicial de la propiedad especifica el número de conexiones disponibles que se crean cuando la agrupación de conexiones es inicialmente creada o se reinicializa. Esta propiedad se utiliza normalmente para reducir el tiempo de arranque necesario para el purgado del pool a su tamaño óptimo. Un valor de cero indica que no hay conexiones creadas previamente. El valor predeterminado es cero. El siguiente ejemplo muestra la configuración de un tamaño de grupo inicial:

pds.setInitialPoolSize(5); Si el tamaño del grupo inicial es mayor que el máximo tamaño del pool, sólo el número máximo de conexiones son inicializadas. En el caso que tamaño del grupo inicial de la propiedad es menor que el mínimo tamaño del pool, sólo el número inicial de las conexiones son inicializadas y se mantienen hasta que se crean conexiones suficientes para cumplir con el mínimo valor de tamaño del pool.

Ajuste el tamaño mínimo del pool El tamaño mínimo del pool especifica la cantidad mínima de las conexiones disponibles y prestadas que un grupo mantiene. Un grupo de conexiones siempre trata de volver al tamaño mínimo especificado a menos que la cantidad mínima aún no se ha alcanzado. Por ejemplo, si el límite mínimo se establece en diez y sólo dos conexiones se han creado y prestado, entonces el número de conexiones que mantiene el pool permanece en dos. Esta propiedad permite que el número de conexiones del pool disminuya a medida que disminuye la demanda. Al mismo tiempo, la propiedad se asegura de que los recursos del sistema no se desperdician en el mantenimiento de las conexiones que son innecesarias. El valor predeterminado es cero. El siguiente ejemplo muestra la configuración de un pool de tamaño mínimo:

pds.setMinPoolSize(2); Establecer el tamaño máximo de Pool El tamaño máximo especifica el número máximo de las conexiones que mantiene un pool. Si se toman prestadas el número máximo de conexiones, las conexiones no estarán disponibles hasta que una conexión se devuelve al pool. Esta propiedad permite que el número de conexiones en el pool aumente a medida que aumenta la demanda. Al mismo tiempo, la propiedad asegura que el pool no crezca hasta el punto de agotar los recursos de un sistema, que, en última instancia, afecta al rendimiento de una aplicación y disponibilidad. Un valor de cero indica que no hay conexiones gestionada por el pool. Un intento de obtener un resultado de conexión en esta situación es una excepción. El siguiente ejemplo muestra la configuración del tamaño máximo del grupo:

pds.setMaxPoolSize(100); Control de conexiones Las conexiones que quedan obsoletas pueden afectar a la disponibilidad de conexión. Es necesario hacer un esfuerzo por cerrarlas, porque de otro modo se pueden desperdiciar conexiones no utilizadas por largos períodos de tiempo. Las propiedades del pool que se muestran en esta sección se utilizan para controlar las conexiones.

Es una buena práctica para cerrar todas las conexiones que ya no son necesarias para una aplicación. Las conexiones de cierre ayudan a minimizar el número de conexiones que quedan obsoletas, pero continúan prestadas. Las principales características para configurar:

Configuración de reutilización de la conexión



Se configuran las características para poder reutilizar una conexión. Cuando supera un numero de reutilizaciones, se elimina del pool. Tiempo máximo de reutilización Permite controlar el tiempo necesario para que una conexión pueda volver a ser reutilizada. Mantiene como ocupadas, conexiones dentro del pool hasta que superan el tiempo estipulado



Tiempo de espera para considerar una conexión abandonada





El tiempo de espera que se permite a los abandonados para recuperar la conexión de nuevo en el grupo de conexión después de que una conexión no ha sido utilizada por un importe específico de tiempo. Ajuste del Tiempo de espera de conexión El tiempo de espera que una solicitud de conexión específica espera para obtener una conexión, si ya no hay ninguna conexión en el pool. La solicitud recibe una excepción si se alcanza el valor de tiempo de espera. Esta característica mejora la usabilidad de tiempo de espera global de la aplicación, minimizando la cantidad de tiempo que una aplicación está bloqueada y ofrece la capacidad de implementar una recuperación.



Ajuste del tiempo de espera de conexión inactiva Especifica el tiempo que una conexión disponible puede permanecer inactiva antes de que se cierre y se retire del pool. Esta propiedad de tiempo de espera sólo es aplicable a las conexiones disponibles y no afecta a las conexiones que estén prestadas.

Ejemplos Un ejemplo básico de la conexión completo sería el siguiente.

import import import import import

java.sql.Connection; java.sql.SQLException; java.sql.Statement; oracle.ucp.jdbc.PoolDataSourceFactory; oracle.ucp.jdbc.PoolDataSource;

public class BasicConnectionExample { public static void main(String args[]) throws SQLException { try { //Crea la instancia con el pool. PoolDataSource

pds = PoolDataSourceFactory.getPoolDataSource();

//introduce las condiciones de la conexión. pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource"); pds.setURL("jdbc:oracle:thin:@//localhost:1521/XE" ); pds.setUser(""); pds.setPassword(""); //Propiedades del pool. pds.setInitialPoolSize(5); //Obtener la conexión con la base de datos. Connection conn = pds.getConnection(); System.out.println("\nConnection obtained from " + "UniversalConnectionPool\n"); //se ejecutan las operaciones con las bases de datos Statement stmt = conn.createStatement (); stmt.execute("select * from foo"); //Se cierra la conexión. conn.close(); conn=null; System.out.println("Connection returned to the " + "UniversalConnectionPool\n"); } catch(SQLException e) { System.out.println("BasicConnectionExample - " + "main()-SQLException occurred : " + e.getMessage()); } } }...


Similar Free PDFs