Uw hoofdoorzaak, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure
is gerelateerd aan deze Glassfish-bug , waarin wordt uitgelegd (in het tabblad Opmerkingen onderaan) dat u mogelijk uw ongeldige verbindingen moet vernieuwen.
De bugcommentaar van Jagadish zegt om uw verbindingsvalidatietype te controleren. Als het is ingesteld op "autocommit" (de standaardinstelling), kunnen de JDBC-stuurprogramma's de eerdere verbindingsvalidatiegegevens in de cache plaatsen en zal er geen daadwerkelijke database-interactie plaatsvinden tijdens toekomstige verbindingsvalidaties.
Om het probleem op te lossen, stelt u connection-validation-method="table"
. in en validation-table-name="any_table_you_know_exists"
(vervang any_table_you_know_exists
met de naam van een bestaande tabel). Hierdoor worden de verbindingen gedwongen om met de database te praten in plaats van met de cache; als de verbinding ongeldig is, wordt deze verbroken en opnieuw gemaakt. Mogelijk moet u ook is-connection-validation-required="true"
. opgeven .
Artikelen om te helpen met extra configuratie:
- Dit artikel legt ook het probleem in detail uit.
- Jagadish's Oracle-blogartikel over dit onderwerp heeft meer informatie.
- Artikel waarin de Glassfish JDBC-verbindingsvalidatie in detail wordt uitgelegd.
Tekst van Jagadish's blog:
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
Merk op dat de voorbeeldcode verwijst naar sys.systables
, wat een MS SQL-tabel is die gegarandeerd bestaat. Raadpleeg voor Oracle de gegarandeerde tabel dual
. Maak voor MySQL een tabel met 1 kolom uitsluitend voor validatiedoeleinden; speel het veilig en vul de tafel vooraf door één rij gegevens in te voegen.