JNDI を介して MS SQL Server に接続しています。私のアプリはDBに一度接続し、将来の使用のためにconを保存します。必要なデータを正常に接続して取得できます。ただし、DB が再起動されると、接続が失われ、「ピアによる接続のリセット: ソケット書き込みエラー」が発生します。
したがって、アプリを再起動する必要があります。そのため、conn がコードで閉じられるたびに接続を作成することにしました。それは正しい方法ですか?connをセッションに保存する必要がありますか?
JNDI を介して MS SQL Server に接続しています。私のアプリはDBに一度接続し、将来の使用のためにconを保存します。必要なデータを正常に接続して取得できます。ただし、DB が再起動されると、接続が失われ、「ピアによる接続のリセット: ソケット書き込みエラー」が発生します。
したがって、アプリを再起動する必要があります。そのため、conn がコードで閉じられるたびに接続を作成することにしました。それは正しい方法ですか?connをセッションに保存する必要がありますか?
ここでも同じ答え: 接続プールを使用します。
コンテナーで実行されていないスタンドアロン/非 Web アプリケーションの場合でも、古い Apache DBCP の代わりにTomcat をお勧めします
しない!接続を検索できる場所から接続プールを作成するApache DBCPのようなものを使用します。接続が必要な場合はプールから検索し、完了したらプールに解放します。Connection オブジェクトのライフサイクルは、dbcp ライブラリによって管理されます。
必要がない場合は、DB へのアクティブな接続を維持しないでください。タスクが完了し、処理する必要のあるデータがなくなったらすぐに、タスクを閉じる必要があります。再度必要な場合は、データソースに新しいものを要求してください。
したがって、この DB のどこかに DataSource オブジェクトを保持する必要があります。
これが、Apache DBCP などの接続プールの目的です。
次の例のように、セッション内のプールへの参照を保持し、接続が必要なときにいつでも使用します。
しないでください。もろくなります。
接続プールを使用します。できれば、接続が有効であることを確認するために、渡す前に接続をプローブできるものを使用してください。
コンテナーがそのようなプールを提供しない場合は、Web アプリケーションで独自のプールを使用できます。