Nguyên nhân gốc rễ của bạn, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure
có liên quan đến lỗi Glassfish này , giải thích (trong tab nhận xét ở dưới cùng) rằng bạn có thể cần phải làm mới các kết nối không hợp lệ của mình.
Nhận xét lỗi của Jagadish nói để kiểm tra loại xác thực kết nối của bạn. Nếu nó được đặt thành "autocommit" (mặc định), trình điều khiển JDBC có thể lưu vào bộ đệm dữ liệu xác thực kết nối trước đó và không có tương tác cơ sở dữ liệu thực tế nào xảy ra trong quá trình xác thực kết nối trong tương lai.
Để giải quyết sự cố, hãy đặt connection-validation-method="table"
và validation-table-name="any_table_you_know_exists"
(thay thế any_table_you_know_exists
với tên của bất kỳ bảng hiện có). Làm điều này buộc các kết nối phải nói chuyện với cơ sở dữ liệu thay vì bộ nhớ cache; nếu kết nối không hợp lệ, nó sẽ bị loại bỏ và được tạo lại. Bạn cũng có thể cần chỉ định is-connection-validation-required="true"
.
Các bài viết giúp cấu hình bổ sung:
- Bài viết này cũng giải thích vấn đề một cách chi tiết.
- Bài viết trên blog Oracle của Jagadish về chủ đề này có nhiều thông tin hơn.
- Bài viết giải thích chi tiết Xác thực kết nối JDBC của Glassfish.
Văn bản từ blog của 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
Lưu ý rằng mã mẫu đề cập đến sys.systables
, là một bảng MS SQL được đảm bảo tồn tại. Đối với Oracle, hãy tham khảo bảng đảm bảo dual
. Đối với MySQL, tạo bảng 1 cột chỉ cho mục đích xác thực; chơi nó an toàn và điền trước bảng bằng cách chèn một hàng dữ liệu.