Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum muss ich den Verbindungspool bei jeder erneuten Bereitstellung leeren?

Ihre Hauptursache, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure hängt mit diesem Glassfish-Fehler , was erklärt (auf der Registerkarte "Kommentare" unten), dass Sie möglicherweise Ihre ungültigen Verbindungen aktualisieren müssen.

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:

  1. Dieser Artikel erklärt auch das Problem im Detail.
  2. Oracle-Blog-Artikel von Jagadish zu diesem Thema hat weitere Informationen.
  3. 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.