Twoja główna przyczyna, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure
jest powiązany z tym błędem Glassfish , który wyjaśnia (na karcie komentarzy na dole), że może być konieczne odświeżenie nieprawidłowych połączeń.
Komentarz o błędzie autorstwa Jagadish mówi, aby sprawdzić typ walidacji połączenia. Jeśli jest ustawiony na „autocommit” (domyślnie), sterowniki JDBC mogą buforować dane z wcześniejszego sprawdzania połączenia, a podczas przyszłej weryfikacji połączenia nie nastąpi żadna rzeczywista interakcja z bazą danych.
Aby rozwiązać problem, ustaw connection-validation-method="table"
i validation-table-name="any_table_you_know_exists"
(zastąp any_table_you_know_exists
z nazwą dowolnej istniejącej tabeli). Spowoduje to, że połączenia będą komunikować się z bazą danych zamiast z pamięcią podręczną; jeśli połączenie jest nieprawidłowe, zostanie odrzucone i ponownie utworzone. Konieczne może być również określenie is-connection-validation-required="true"
.
Artykuły pomocne przy dodatkowej konfiguracji:
- Ten artykuł wyjaśnia również szczegółowo problem.
- Artykuł na blogu Jagadish Oracle na ten temat ma więcej informacji.
- Artykuł wyjaśniając szczegółowo weryfikację połączenia Glassfish JDBC.
Tekst z bloga Jagadisha:
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
Zauważ, że przykładowy kod odnosi się do sys.systables
, który jest tabelą MS SQL, której istnienie jest gwarantowane. W przypadku Oracle zapoznaj się z tabelą gwarantowaną dual
. W przypadku MySQL utwórz tabelę 1-kolumnową wyłącznie do celów walidacji; baw się bezpiecznie i wstępnie wypełnij tabelę, wstawiając jeden wiersz danych.