WebSphere Application Server は、JDBC 準備済みステートメント・キャッシングをパフォーマンス拡張機能として使用します。 この機能を DB2 for z/OS とともに使用している場合は、 使用可能な DB2 JDBC カーソル・オブジェクトの数に 影響が生じることがありますので、注意してください。
PreparedStatement オブジェクトを 実行して ResultSet オブジェクトを取得する場合、DB2 JDBC カーソル・オブジェクトは、 対応する DB2 準備済みステートメントがクローズされるまで、それにバインドされます。これは 、DB2 Connection オブジェクトが WebSphere Application Server 接続プールから解放される場合に起こります。 アプリケーションの観点から、結果セット、準備済みステートメント、および接続が、 それぞれ順番にクローズされます。ただし、基礎となる DB2 Connection は WebSphere Application Server によってプールされ、基礎となる DB2 PreparedStatement はアプリケーション・ サーバーによってキャッシュされ、 この PreparedStatement オブジェクト上に作成される各 ResultSet と関連する、基礎となる各 DB2 JDBC カーソル・ オブジェクトはまだ解放されません。
キャッシュの各 PreparedStatement オブジェクトは、 これに関連付けられた結果セットを 1 つ以上持つことができます。結果セットがオープンされ、 接続をクローズしても結果セットがクローズされない場合、その結果セットはまだ キャッシュの準備済みステートメントに関連付けられています。各結果セットには、 接続された固有の JDBC カーソルがあります。このカーソルはステートメントによって保持され、 準備済みステートメントが WebSphere Application Server キャッシュからクリアされるまで解放されません。
java.sql.SQLException: DB2SQLJJDBCProfile Error: No more JDBC Cursors without hold
この問題を回避するための、いくつかの WebSphere Application Server チューニング 提案を以下に示します。