sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué necesito vaciar el grupo de conexiones cada vez que vuelvo a implementar?

Su causa raíz, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure está relacionado con este error Glassfish , que explica (en la pestaña de comentarios en la parte inferior) que es posible que deba actualizar sus conexiones no válidas.

El comentario de error de Jagadish dice que verifique su tipo de validación de conexión. Si se establece en "autocommit" (predeterminado), los controladores JDBC pueden almacenar en caché los datos de validación de conexión anteriores y no se producirá ninguna interacción real con la base de datos durante futuras validaciones de conexión.

Para resolver el problema, configure connection-validation-method="table" y validation-table-name="any_table_you_know_exists" (reemplace any_table_you_know_exists con el nombre de cualquier tabla existente). Hacer esto obliga a las conexiones a comunicarse con la base de datos en lugar de con la memoria caché; si la conexión no es válida, se eliminará y se volverá a crear. Es posible que deba especificar también is-connection-validation-required="true" .

Artículos para ayudar con la configuración adicional:

  1. Este artículo también explica el problema en detalle.
  2. Artículo del blog de Oracle de Jagadish sobre este tema tiene más información.
  3. Artículo explicando la validación de la conexión JDBC de Glassfish en detalle.

Texto del blog de Jagadish:

AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required=true
domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required = true

AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method=table
domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method = table

bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name=sys.systables
domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name = sys.systables

Tenga en cuenta que el código de ejemplo se refiere a sys.systables , que es una tabla de MS SQL cuya existencia está garantizada. Para Oracle, consulte la tabla garantizada dual . Para MySQL, cree una tabla de 1 columna únicamente con fines de validación; vaya a lo seguro y rellene previamente la tabla insertando una fila de datos.