La causa principale, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure
è correlato a questo bug di Glassfish , che spiega (nella scheda dei commenti in basso) che potrebbe essere necessario aggiornare le connessioni non valide.
Il commento del bug di Jagadish dice di controllare il tipo di convalida della connessione. Se è impostato su "autocommit" (impostazione predefinita), i driver JDBC potrebbero memorizzare nella cache i dati di convalida della connessione precedenti e non si verificherà alcuna interazione effettiva con il database durante le convalide della connessione future.
Per risolvere il problema, imposta connection-validation-method="table"
e validation-table-name="any_table_you_know_exists"
(sostituisci any_table_you_know_exists
con il nome di qualsiasi tabella esistente). In questo modo le connessioni vengono forzate a parlare con il database anziché con la cache; se la connessione non è valida, verrà eliminata e ricreata. Potrebbe essere necessario specificare anche is-connection-validation-required="true"
.
Articoli per aiutare con la configurazione aggiuntiva:
- Questo articolo spiega anche il problema in dettaglio.
- Articolo del blog Oracle di Jagadish su questo argomento ha maggiori informazioni.
- Articolo spiegando in dettaglio la convalida della connessione JDBC di Glassfish.
Testo dal blog di 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
Nota che il codice di esempio fa riferimento a sys.systables
, che è una tabella MS SQL di cui è garantita l'esistenza. Per Oracle, fare riferimento alla tabella garantita dual
. Per MySQL, crea una tabella a 1 colonna esclusivamente a scopo di convalida; vai sul sicuro e precompila la tabella inserendo una riga di dati.