2016-06-28 11 views
0

ここでサーブレットに基づいたアプリケーションがあり、問題が発生しています。ここでは何が起こっているのですか:オラクルのタイムアウト後(仕事後に家に帰って翌日にアプリケーションにログインしようとした場合など)、接続のクローズ、クローズド・ステートメントなどの多くのエラーと例外が発生します。セッションが終了した後にJDBCをOracleに再接続できない

このエラーをシミュレートする方法は、adminとしてoracleセッションにアクセスし、使用中にセッションを強制終了することです。これを行うと、同じ問題が発生します。我々は何をすべきか

があり、我々は(達人で設定された)他のすべてのモジュールへの前提条件であるシステム-PROJと呼ばれるメインのプロジェクトを持っている、と我々は、Tomcatですべて.warファイルを展開します。

この問題は、tomcatを再起動すると解決されます。そのような単純な。

私の質問はTomcatのを再起動せずにこの接続を再確立するいかなる方法はありで、ありますか?または、Tomcatを再起動する(または自動的に.warを再ロードする)必要がある場合は、それを行う方法はありますか?

どこが間違っているのか分かりません。

答えて

1

私はあなたがデータベースプールを使用していると思います。接続プールは、使用される予定のDB接続の事前作成された束であり、複数の要求を処理するために再利用されます。アイドル時間中、データベース接続はデータベース・サーバー上でタイムアウトし、無効になります。したがって、長期間使用しないとエラーが発生します。 Tomcatを再起動すると、接続プールに新しい接続が再作成され、問題が解決されます。

データベースプールを使用している場合は、接続がx分間利用されていない場合は、ランダムクエリ(Oracleの「select count(*)from tab」)でデータベースにpingを実行できます。 xは、データベースのアイドル接続タイムアウト時間より短くなければなりません。

他の簡単な解決策は、DB接続を開き、DB操作を実行してから、データベースプールを使用するのではなく、DB接続を閉じることです。オンデマンドで接続が作成されるため、タイムアウトの問題は発生しません。これは簡単な解決策ですが、新しい接続を取得するにはオーバーヘッドがあるため、これは実行可能な解決策ではありません。

関連する問題