根本的な原因、PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure
このGlassfishのバグに関連しています 、これは(下部のコメントタブで)無効な接続を更新する必要があるかもしれないことを説明しています。
Jagadishによるバグコメント 接続検証タイプを確認するように指示します。 「autocommit」(デフォルト)に設定されている場合、JDBCドライバーは以前の接続検証データをキャッシュする可能性があり、将来の接続検証中に実際のデータベースの相互作用は発生しません。
この問題を解決するには、connection-validation-method="table"
を設定します およびvalidation-table-name="any_table_you_know_exists"
(any_table_you_know_exists
を置き換えます 既存のテーブルの名前で)。これを行うと、接続はキャッシュではなくデータベースと通信するようになります。接続が無効な場合、接続は削除されて再作成されます。 is-connection-validation-required="true"
も指定する必要がある場合があります 。
追加の構成に役立つ記事:
- この記事 問題についても詳しく説明しています。
- JagadishのOracleブログ記事 このトピックに関する詳細情報があります。
- 記事 GlassfishJDBC接続検証の詳細を説明します。
ジャガディシュのブログからのテキスト:
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
サンプルコードはsys.systables
を参照していることに注意してください 、これは存在が保証されているMSSQLテーブルです。 Oracleについては、保証されたテーブルdual
を参照してください。 。 MySQLの場合、検証目的でのみ1列のテーブルを作成します。安全にプレイし、1行のデータを挿入してテーブルに事前入力します。