7.5.3 Java EEアプリケーションサーバの機能
Java EEアプリケーションサーバが提供する一般的な機能について説明します。
(1) コネクションプーリング
(a) コネクションプーリングとは
ユーザアプリケーションを呼び出す度にデータベースと接続/切断するのではなく,接続済みのコネクションオブジェクトをプールして使い回す仕組みのことを,コネクションプーリングと呼びます。
|
(b) コネクションプーリング使用時の注意事項
-
クライアント環境定義などのJDBCドライバの設定を変更しても無効となります。設定変更を反映させるには,Java EEアプリケーションサーバの再起動やコネクションプール内のコネクションオブジェクトを破棄するなどして,再接続する必要があります。具体的な方法については,各Java EEアプリケーションサーバのマニュアルを参照してください。
-
HiRDBサーバと常時接続しているUAPでは,クライアント環境定義PDSWATCHTIMEでのタイムアウトによって,接続が切断されることがあります。クライアント環境定義PDSWATCHTIMEを設定する場合の注意事項については,マニュアル「HiRDB Version 9 UAP開発ガイド」の「クライアント環境定義の設定内容」のPDSWATCHTIMEを参照してください。
-
ステートメントのcloseメソッド実行時にSQL前処理を破棄するように設定している場合,ステートメントのclose後にトランザクションを決着する必要があります。詳細はマニュアル「HiRDB Version 9 UAP開発ガイド」の次の個所を参照してください。
- ステートメントのcloseメソッド実行時にSQL前処理を破棄する方法
-
「接続情報の優先順位」の「ステートメントのcloseメソッド実行時のSQL前処理の破棄」
- ステートメントのclose後にトランザクションを決着する方法
-
「ユーザプロパティ」の「HiRDB_for_Java_STATEMENT_CLOSE_BEHAVIOR」
(2) ステートメントプーリング/ステートメントキャッシュ
(a) ステートメントプーリング/ステートメントキャッシュとは
同一のSQL文を指定して前処理済みのステートメントオブジェクト(PreparedStatement,CallableStatement)を作成するユーザアプリケーションを呼び出す場合などで,ステートメントオブジェクトをプールして使い回す仕組みのことをステートメントプーリング/ステートメントキャッシュと呼びます。
ステートメントオブジェクトはコネクションをまたがって使い回すことはできないため,コネクションプーリングを使用していることが前提の機能となります。
|
(b) ステートメントプーリング/ステートメントキャッシュ使用時の注意事項
-
前処理済みのステートメントオブジェクトがプーリングされている間,関連するスキーマ資源(表やインデクスなど)に対して排他を取得します。これらの資源に対して定義系SQLを実行する場合は,クライアント環境定義PDDDLDEAPRPEXEを指定してください(ホールダブルカーソルを使用している場合はPDDDLDEAPRPも指定してください)。
ただし,定義系SQLを実行した場合,前処理結果が無効になるため,Java EEアプリケーションサーバの再起動やコネクションプール内のコネクションオブジェクトを破棄する必要があります。
詳細は,マニュアル「HiRDB Version 9 UAP開発ガイド」の「クライアント環境定義の設定内容」のPDDDLDEAPRPEXEを参照してください。
-
自動再接続機能を使用して再接続した場合,再接続前からプーリングされているステートメントオブジェクトが使い回されると,実行時に例外が発生します。ステートメントプーリング/ステートメントキャッシュ機能を使用する場合には,自動再接続機能は使用しないでください。
ステートメントのcloseメソッド実行時にSQL前処理を破棄しないよう,システムプロパティHiRDB_for_Java_STATEMENT_CLOSE_BEHAVIORにFALSEを設定するか,又は指定を省略してください。詳細はマニュアル「HiRDB Version 9 UAP開発ガイド」の次の個所を参照してください。
- システムプロパティHiRDB_for_Java_STATEMENT_CLOSE_BEHAVIORの設定方法
-
「ユーザプロパティ」の「HiRDB_for_Java_STATEMENT_CLOSE_BEHAVIOR」
- 上記以外の設定方法
-
「接続情報の優先順位」の「ステートメントのcloseメソッド実行時のSQL前処理の破棄」
-
SELECT文,INSERT文,DELETE文,UPDATE文,PURGE TABLE文,及びCALL文以外のSQL文では,コミット時に前処理済みのSQL文が無効になります。
前処理が無効となるSQL文についてはPreparedStatement/CallableStatementオブジェクトを使用せず,Statementオブジェクトを使用して実行してください。SQL文による切り分けができない場合は,ステートメントプーリング/ステートメントキャッシュを使用しないでください。