Ihre Hauptursache, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure
hängt mit diesem Glassfish-Fehler
Der Fehlerkommentar von Jagadish sagt, dass Sie Ihren Verbindungsvalidierungstyp überprüfen sollen. Wenn es auf „autocommit“ (Standardeinstellung) eingestellt ist, können die JDBC-Treiber die vorherigen Verbindungsvalidierungsdaten zwischenspeichern, und es findet keine tatsächliche Datenbankinteraktion während zukünftiger Verbindungsvalidierungen statt.
Um das Problem zu lösen, legen Sie connection-validation-method="table"
fest und validation-table-name="any_table_you_know_exists"
(ersetzen Sie any_table_you_know_exists
mit dem Namen einer vorhandenen Tabelle). Dadurch werden die Verbindungen gezwungen, mit der Datenbank statt mit dem Cache zu kommunizieren. Wenn die Verbindung ungültig ist, wird sie gelöscht und neu erstellt. Möglicherweise müssen Sie auch is-connection-validation-required="true"
angeben .
Artikel, die bei der zusätzlichen Konfiguration helfen:
- Dieser Artikel erklärt auch das Problem im Detail.
- Oracle-Blog-Artikel von Jagadish zu diesem Thema hat weitere Informationen.
- Artikel Erläuterung der Glassfish JDBC-Verbindungsvalidierung im Detail.
Text aus dem Blog von 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
Beachten Sie, dass sich der Beispielcode auf sys.systables
bezieht , bei der es sich um eine garantiert vorhandene MS SQL-Tabelle handelt. Beziehen Sie sich für Oracle auf die garantierte Tabelle dual
. Erstellen Sie für MySQL ausschließlich zu Validierungszwecken eine einspaltige Tabelle. Gehen Sie auf Nummer sicher und füllen Sie die Tabelle vorab aus, indem Sie eine Datenzeile einfügen.