3.3.6 リソースに接続するための実装
アプリケーションからリソースに接続するには,Enterprise Beanやサーブレットでリソースへの参照を取得する必要があります。リソースへの参照を取得する方法として,ルックアップを使用する方法とDI(Dependency Injection)を使用する方法があります。
なお,EJB 3.0以降を使用する場合,DIを使用してリソースへの参照を取得してください。
(1) ルックアップを使用してリソースへの参照を取得する方法
ルックアップを使用する場合,次の手順でアプリケーションからリソースに接続します。
-
リソースに接続するコネクションを取得するためのファクトリクラスを,JNDIを使用してルックアップします。
ルックアップする名前は,Enterprise BeanやサーブレットのDDで指定します。該当するタグは<resource-ref>タグ中の<res-ref-name>タグです。
-
コネクションのファクトリクラスを使用して,コネクションを取得します。
-
取得したコネクションを使用して,リソースに接続します。
-
使用済みのコネクションをクローズします。
コネクションプーリングを使用している場合は,手順2.でプーリングされているコネクションが取得され,手順4.でコネクションがプールに返却されます。ユーザプログラムでコネクションプーリングを意識したコーディングは必要ありません。
(2) DIを使用してリソースへの参照を取得する方法
DIを使用してリソースへの参照を取得する場合,DDの定義は不要となります。DIの概要およびDI使用時の注意事項については,「17.4 DIの使用」を参照してください。
(3) リソースへの接続を実装する場合の注意事項
ユーザプログラムでリソースへのコネクションを取得する場合の注意事項を次に示します。
-
使用後には必ずクローズしてください。具体的には,例外などが発生した場合にも必ずクローズするように,finally節でコネクションをクローズしてください。なお,finalizeメソッドが呼ばれるタイミングはJavaVMのGCのタイミングに依存するので,finalizeメソッドでコネクションをクローズする設計にはしないでください。ユーザプログラムでコネクションが正しくクローズされない場合,取得できるコネクションの最大数に達してしまい,それ以上のコネクションが取得できなくなるおそれがあります。
-
ほかのJ2EEコンポーネントで取得したコネクションを利用しないでください。J2EEコンポーネントにわたってコネクションを渡した場合の動作は保証しません。ほかのJ2EEコンポーネントと同一コネクションを使用したい場合は,コネクションシェアリングを使用して,そのJ2EEコンポーネント内でコネクションを取得してください。