2009-07-06 31 views
11

OracleConnectionCacheImplを介してOracle接続プーリングに関する問題が発生しています。シン・ドライバーを介してデータベース・サーバー(Oracle 10g)の接続プールに接続すると、指定されていない時間が経過するまでdb接続が切断され(アイドル状態の接続が原因で)、エラー・メッセージが表示されます。接続の中断後にOracle接続プールを自動再接続する方法はありますか。

クローズド接続。

ページをリフレッシュして接続を再試行するとデータベースが再接続されるため、ネットワークまたはデータベースに問題はないようです。何らかの理由でプール内の接続が停止している場合、Oracle接続プールが接続を検証して再接続する方法はありますか?

私は、Apache Tomcatを6.0.18、JavaのEE6更新11.

を使用しています(Oracleのthinドライバでのping機能があるようです。ヘルプとどこが、私はそれを見つけることができていますか?)

+2

1)あなたは、閉じた接続 2)あなたはInactivityTimeout、TimeToLiveTimeoutをまたはAbandonedConnectionTimeoutのがデフォルト以外の値に設定しましたため、全体のスタックトレースを追加することはできますか? 3)ValidateConnectionを使用していますか? –

+0

4)アプリケーションサーバーとDBサーバー間の物理的な接続がネットワークレベルで切断されていますか?ファイアウォールによって? –

+0

これらのパラメータはどこで設定しますか?私はOracleをプログラミングするのが初めてであるため、これらのパラメータをどこで見つけるかはわかりません。どこでValidateConnectionを見つけて再接続を強制できますか? (エラーが表示された直後にブラウザを再起動するだけで直ちに問題が解決されますが、これがファイアウォールの問題であるかどうかはわかりません) – futureelite7

答えて

-1

C3P0などの別の接続プールライブラリを使用し、自動reconnectの機能を使用します。

0

Apache DBCP(DB接続プール)がここで役立ちます。 'validationQuery'パラメータで設定することができます。このパラメータは、プールから削除された接続で実行されるSQLクエリです。クエリが失敗すると、接続は破棄され、新しい接続が作成されて与えられます。

詳細については、http://commons.apache.org/proper/commons-dbcp/configuration.htmlを参照してください。

メモ:validationQueryは、プールから接続を確立するたびに呼び出されるため、できるだけ高速にする必要があります。例えば:Tomcatの接続プールが死んでの接続の世話をするように

SELECT id FROM users LIMIT 1; 
0

あなたはのcontext.xmlで、いくつかの設定パラメータを追加することができます。ここでは、context.xmlの一例を示します。あなたの設定に従ってuser/password/url/portsなどを使用してください。

<?xml version="1.0" encoding="UTF-8"?> 
<Context path=""> 
    <!-- Specify a JDBC data source --> 
    <Resource name="jdbc/db" auth="Container" 
       type="javax.sql.DataSource" 
       username="user" 
       password="password" 
       driverClassName="driver.class.fullpath" 
       url="jdbc:oracle://localhost:3306/ 
       maxActive="50" 
       maxIdle="10" 
       testOnBorrow="true" 
       testWhileIdle="true" 
       validationQuery="/* ping */" 
       removeAbandoned="true" 
       logAbandoned="true"/> 
</Context> 
関連する問題