EntityManager(TopLink Essentials)を介して多数のネイティブSQLクエリを実行する長時間実行メソッドがあります。各クエリの実行には数ミリ秒しかかかりませんが、何千ものクエリがあります。これは、単一のEJBトランザクション内で発生します。15分後、データベースは接続を閉じ、次のエラーが発生します。
Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.1 (Build b02-p04 (04/12/2010))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Closed Connection
Error Code: 17008
Call: select ...
Query: DataReadQuery()
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:319)
.
.
.
RAR5031:System Exception.
javax.resource.ResourceException: This Managed Connection is not valid as the phyiscal connection is not usable
at com.sun.gjc.spi.ManagedConnection.checkIfValid(ManagedConnection.java:612)
JDBC接続プールで設定is-connection-validation-required="true"
しconnection-validation-method="table"
ましたが、これは役に立ちませんでした。
この種のエラーを正確に処理するために、JDBC接続の検証があると思いました。また、TopLink拡張機能(http://www.oracle.com/technetwork/middleware/ias/toplink-jpa-extensions-094393.html)で何らかのタイムアウト設定を確認しましたが、何も見つかりませんでした。TopLinkセッション構成ファイル(http://download.oracle.com/docs/cd/B14099_19/web.1012/b15901/sessions003.htm)もありますが、そこにも有用なものはないと思います。
Oracle DBAテーブルにアクセスできませんが、CONNECT_TIMEプロファイル変数の設定に従って、Oracleは15分後に接続を閉じると思います。
TopLinkまたはJDBCプールを作成して、閉じた接続を再確立する他の方法はありますか?
データベースはOracle10g、アプリケーションサーバーはSunGlassfish2.1.1です。