Configuración de consulta de validación en Hibernate

RECU-0699 (Recurso Referencia)

Descripción

El presente recurso describe el método de configuración de consultas de validación en las distintas implementaciones del pool de conexiones empleadas por Hibernate.

Características

La configuración de la consulta de validación en Hibernate dependerá de la implementación que se haya elegido para el pool de conexiones. Con Hibernate pueden emplearse tres tipos de distintos de pools de conexión: c3p0, Apache DBCP y Proxool.

Configuración con c3p0

Los parámetros de configuración de consultas de validación en c3p0 son los siguientes:

  • automaticTestTable: Indica el nombre de una tabla que será creada para la realización de verificaciones. Si se proporciona, el posible valor del parámetro preferredTestQuery será ignorado.
  • connectionTesterClassName: Una clase Java que implemente los interfaces ConnectionTester o QueryConnectionTester, en la que se definirá el método deseado para realizar la validación.
  • idleConnectionTestPeriod: Si es un número mayor que 0, se verificarán todas las conexiones pendientes cada dicho número de segundos.
  • preferredTestQuery: La consulta que será empleada para realizar la validación. No tendrá efecto si se está empleando automaticTestTable.
  • testConnectionOnCheckin: Puede tener los valores "true" o "false". Si es "true", se verificarán las conexiones al realizar la operación de checkin.
  • testConnectionOnCheckout: Puede tener los valores "true" o "false". Si es "true", se verificarán las conexiones al realizar la operación de checkout. Esta comprobación es costosa y solo debe realizarse cuando sea estrictamente necesario.

Si no se indica un método de validación mediante los parámetros automaticTestTable, connectionTesterClassName o preferredTestQuery, la validación se realizará llamando al método getTables() del objeto DatabaseMetaData asociado a la conexión. Aunque tiene la ventaja de ser un método de validación válido para cualquier tipo de base de datos, es mas costoso que especificar una consulta. El método menos costoso en cuanto a rendimiento es especificar una tabla de pruebas mediante el parámetro automaticTestTable.

Aunque el método mas fiable de comprobar conexiones es realizar la validación junto con la operación de checkOut, esta también es la opción mas costosa, por lo que, para la mayoría de los sistemas, se recomienda una especificar testConnectionOnCheckin junto con verificaciones periódicas definidas con el parámetro idleConnectionTestPeriod.

Ejemplo:

...
c3p0.preferredTestQuery=SELECT 1 from dual
c3p0.testConnectionOnCheckout=true
c3p0.idleConnectionTestPeriod=1800
...

 

Configuración con Apache DBCP

La consulta de validación se configura mediante una serie de parámetros incluidos en la configuración general. Estos parámetros son los siguientes:

  • validationQuery: La consulta de validación a emplear.
  • testOnBorrow: Puede valer "true" o "false". Indica si se comprobarán las conexiones antes de ser sacadas del pool.
  • testOnReturn: Puede valer "true" o "false". Indica si se comprobarán las conexiones antes de ser devueltas al pool.
  • testWhileIdle: Puede valor "true" o "false". Indica si se comprobarán las conexiones de forma periódica por el eliminador de objetos ociosos. Las conexiones que no puedan ser validadas serán eliminadas del pool.
  • timeBetweenEvictionRunsMillis: Numero de milisegundos que pasará entre cada ejecución del eliminador de objetos ociosos.
  • numTestsPerEvictionRun: Número de conexiones a comprobar por cada ejecución del eliminador de objetos ociosos.
  • minEvictableIdleTimeMillis: Tiempo mínimo en milisegundos que una conexión puede permanecer en el pool antes de ser candidato a su eliminación por el eliminador de objetos ociosos.

Los parámetros dependen de que se haya definido una consulta mediante validationQuery. Si este parámetro contiene una cadena vacía, no se ejecutarán las opciones definidas por el resto de los parámetros.

Ejemplo:

...
hibernate.dbcp.testOnBorrow=true
hibernate.dbcp.testOnReturn=false
hibernate.dbcp.validationQuery=SELECT 1+1
...

 

Conexiones con Proxool

La consulta de validación se configura mediante los siguientes parámetros:

  • house-keeping-test-sql: La consulta de validación a emplear.
  • test-before-use: Puede valer "true" o "false". Si vale "true" cada conexión será verificada antes de ser empleada.
  • test-after-use: Puede valer "true" o "false". Si vale "true" cada conexión será verificada después de ser empleada, antes de devolverla al pool de conexiones.

Ejemplo:

...
jdbc-0.proxool.house-keeping-test-sql=SELECT 1 from dual
jdbc-0.proxool.test-before-use=true
jdbc-0.proxool.test-after-use=false
...

Contenidos relacionados

Pautas
Área: Desarrollo » Rendimiento
Código Título Tipo Carácter
LIBP-0332 Configuración de la conexión de la base de datos Libro de pautas Directriz Obligatoria
Recursos