4

別のマシンで実行されている Oracle データベースに接続する Java Web アプリケーションがあります (これが関連しているかどうかはわかりません)。接続プーリングに DBCP を使用しています。Web アプリケーションは JBoss 4.2.2 で実行されており、Spring でデータソースを Bean として定義しています。

ORMにはHibernateを使用しています。

「ORA-02396: 最大アイドル時間を超えました。もう一度接続してください」などのエラーが時々発生します。

「removeAbandoned」(true) および「removeAbandondedTimeout」(120) という名前の DBCP BasicDataSource にプロパティを追加しようとしましたが、役に立ちませんでした。

どんな助けでも大歓迎です。さらに情報を提供する必要がある場合は、お知らせください - 私は接続プーリングなどの内部の仕組みについてそれほど詳しくはありません...

4

3 に答える 3

7

データソースを構成するときに、testWhileIdleプロパティをに設定してみてください。trueまた、テスト クエリも必要です。Oracle の場合は、次のようなものでselect 1 from dual十分です。

これにより、dbcp はアイドル状態の接続を最新の状態に保つためにナッジするように指示されます。

後で必要になったときに接続を再作成しても構わない場合は、アイドル状態になった接続を削除することも検討できます。、および/プロパティの構成オプションについて説明しているドキュメントを参照してください。minEvictableIdleTimeMillistimeBetweenEvictionRunsMillismaxIdleminIdle

于 2009-10-15T17:12:02.907 に答える
0

のフォーラムでこのスレッドを参照してください。

ユーザーは、c3p0 に切り替えるか、testWhileIdleプロパティをスプリング構成に追加することになりました。

<prop key="hibernate.dbcp.testWhileIdle">true</prop>

<prop key="hibernate.dbcp.validationQuery">
select 1 from dual
</prop>
于 2009-10-15T17:13:17.020 に答える
0

私なら、Oracle Universal Connection Pool ライブラリに切り替えます。これは Oracle JDBC 接続用に最適化されていますが、切り替えると、どの JDBC ドライバーでも動作します。また、JDBC 4.0 に準拠しており、実際に取り組んでいます。C3P0、Proxool、DBCP はすべて停滞しています。クエリではなく Oracle への ping を実行することで接続を検証します。これははるかに高速です。

Oracle UCP

于 2009-10-15T17:22:46.210 に答える