3.14.7 DataSourceオブジェクトのキャッシング
J2EEアプリケーションからデータベースにアクセスする場合,JNDIインタフェースを使用してjavax.sql.DataSource型のオブジェクト(以降,DataSourceオブジェクト)の検索を要求します。J2EEサーバのデフォルトの動作では,該当するDataSourceが登録されている場合に,DataSourceオブジェクトのインスタンスを生成してアプリケーションに返します。
このとき,DataSourceオブジェクトのキャッシングを使用すると,J2EEサーバは,登録されているDataSourceオブジェクトのインスタンスをキャッシングして,検索の要求に対して同じインスタンスを返します。DataSourceオブジェクトのキャッシングを使用すると,DataSourceオブジェクトの検索時間が短くなります。
DataSourceオブジェクトのキャッシングをするための設定は,J2EEサーバのプロパティをカスタマイズして設定します。J2EEサーバの動作設定のカスタマイズについては,「3.14.10 実行環境での設定」を参照してください。
(1) 前提条件
DataSourceオブジェクトのキャッシング機能は,Enterprise Beanのビジネスメソッド,およびサーブレット/JSPのサービスメソッド内でDataSourceをルックアップし,該当するインスタンスをメンバ変数などに保持しない場合に有効です。
ビジネスメソッドやサービスメソッド内でルックアップしたDataSourceオブジェクトをメンバ変数に保持し,ほかのメソッドでも利用する場合は有効ではありません。また,Enterprise BeanのejbCreateメソッドやサーブレット/JSPのinitメソッドなどの初期化メソッド内でルックアップしたDataSourceオブジェクトをメンバ変数に保持し,ビジネスメソッドやサービスメソッドで使用する場合も有効ではありません。
(2) 注意事項
DataSourceオブジェクトのキャッシング機能を使用する場合に,次に示すようなリソースアダプタを使用すると,動作時に属性ファイルの<resource-ref>の定義が有効にならないことがあります。
-
同一J2EEコンポーネントから同一リソースに対して複数の<resource-ref>タグを定義し,それぞれの<resource-ref>タグにある<res-sharing-scope>タグや<res-auth>タグに異なる値を指定した,リソースアダプタを使用する。
同一J2EEコンポーネントで複数の<resource-ref>タグを定義する場合は,別のリソース(デプロイ単位が別になるリソースアダプタ)を使用するようにしてください。