org.apache.commons.dbcp.BasicDataSource
からのデータベース接続がソケット書き込みエラーで停止している状況が発生しています。
com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: socket write error
もちろん、その後の接続への書き込みはすべて失敗します。
com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.
このような例外をキャッチし、発生時に新しい接続を要求するようにコードを更新した後、再び失敗しました。呼び出しDataSource#getConnection()
が呼び出されるたびに実際に新しい接続を提供していないのではないかと疑うのは正しいですか?閉じている既存の接続を再利用するだけではありませんか?
私が正しければ、古い接続を破棄して新しい接続を要求する正しい方法は何ですか?
編集:これが私が知りたいことのより簡潔なバージョンです:
Connection c1, c2;
c1 = DatabaseManager.getConnection();
// c1.close() not called
c2 = DatabaseManager.getConnection();
「c1==c2」は本当のステートメントですか?または、2つの接続が割り当てられていますか?後者の場合、次のようなコードは「接続プールのリーク」を表します。
Connection c1;
c1 = DatabaseManager.getConnection();
// c1.close() not called
c1 = DatabaseManager.getConnection();