sql >> Database >  >> RDS >> Mysql

Waarom moet ik de verbindingspool elke keer dat ik opnieuw implementeer leegmaken?

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:

  1. Dit artikel legt ook het probleem in detail uit.
  2. Jagadish's Oracle-blogartikel over dit onderwerp heeft meer informatie.
  3. 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.



  1. Hoe maak je geselecteerde dynamische velden uit een tabel in mysql?

  2. LocalDateTime , ZonedDateTime en Tijdstempel

  3. Is er een tijdelijke oplossing voor het definiëren van een unieke beperking die NULL-waarden als niet-onderscheiden behandelt?

  4. MySQLDataReader haalt Null-waardeprobleem op in c#