Din grundorsak, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure
är relaterad till denna Glassfish-bug , som förklarar (i kommentarfliken längst ner) att du kan behöva uppdatera dina ogiltiga anslutningar.
Buggkommentaren av Jagadish säger för att kontrollera din anslutningsvalideringstyp. Om den är inställd på "autocommit" (standard), kan JDBC-drivrutinerna cachelagra tidigare anslutningsvalideringsdata, och ingen faktisk databasinteraktion kommer att ske under framtida anslutningsvalideringar.
För att lösa problemet, ställ in connection-validation-method="table"
och validation-table-name="any_table_you_know_exists"
(ersätt any_table_you_know_exists
med namnet på en befintlig tabell). Om du gör detta tvingar anslutningarna att prata med databasen istället för cachen; om anslutningen är ogiltig kommer den att avbrytas och återskapas. Du kan också behöva ange is-connection-validation-required="true"
.
Artiklar som hjälper dig med ytterligare konfiguration:
- Den här artikeln förklarar också problemet i detalj.
- Jagadishs Oracle-bloggartikel om detta ämne har mer information.
- Artikel förklarar Glassfish JDBC Connection Validation i detalj.
Text från Jagadishs blogg:
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
Observera att exempelkoden hänvisar till sys.systables
, som är en MS SQL-tabell som garanterat finns. För Oracle, se den garanterade tabellen dual
. För MySQL, skapa en tabell med en kolumn endast för valideringsändamål; spela säkert och fyll i tabellen i förväg genom att infoga en rad med data.