Akar penyebab Anda, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure
terkait dengan bug Glassfish ini , yang menjelaskan (di tab komentar di bagian bawah) bahwa Anda mungkin perlu menyegarkan koneksi yang tidak valid.
Komentar bug oleh Jagadish mengatakan untuk memeriksa jenis validasi koneksi Anda. Jika disetel ke "autocommit" (default), driver JDBC mungkin menyimpan data validasi koneksi sebelumnya, dan tidak ada interaksi database aktual yang akan terjadi selama validasi koneksi mendatang.
Untuk mengatasi masalah, setel connection-validation-method="table"
dan validation-table-name="any_table_you_know_exists"
(ganti any_table_you_know_exists
dengan nama tabel yang ada). Melakukan hal ini memaksa koneksi untuk berbicara ke database alih-alih cache; jika koneksi tidak valid, itu akan dijatuhkan dan dibuat ulang. Anda mungkin juga perlu menentukan is-connection-validation-required="true"
.
Artikel untuk membantu dengan konfigurasi tambahan:
- Artikel ini juga menjelaskan masalahnya secara detail.
- Artikel Blog Oracle Jagadish tentang topik ini memiliki info lebih lanjut.
- Artikel menjelaskan Validasi Koneksi JDBC Glassfish secara detail.
Teks dari blog 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
Perhatikan bahwa kode contoh mengacu pada sys.systables
, yang merupakan tabel MS SQL yang dijamin ada. Untuk Oracle, lihat tabel dijamin dual
. Untuk MySQL, buat tabel 1 kolom hanya untuk tujuan validasi; mainkan dengan aman dan isi tabel terlebih dahulu dengan memasukkan satu baris data.