2.3.2 JNDI名前空間のマッピングとルックアップ
ここでは,JNDI名前空間のマッピングの仕組みと,ルックアップでの指定する名称とJNDI名前空間およびDDの関係について説明します。
(1) Enterprise Beanを参照する仕組みと使い方(ejb-ref)
J2EEサーバ内で実行するアプリケーションでは,Enterprise Beanを呼び出すために,Enterprise Bean参照の名前解決が必要です。正確には,Enterprise Beanに対応するEJBホームインタフェース,EJBローカルホームインタフェース,ビジネスインタフェースなどの名前解決をします。
EJBホームインタフェース,またはビジネスインタフェースの名前解決をするためには,次の2種類の作業が必要です。
-
参照側アプリケーションの作成時の作業
アプリケーションの作成時に参照用の名称を決め,Enterprise Beanやサーブレットなどのプログラム内でのlookupの引数に,その参照用の名称を指定します。また,java:comp/envを使用する場合は,DDの<ejb-ref>に,決めた参照用の名称を記載します。
-
参照側アプリケーションのデプロイ時の作業
作成したアプリケーションをJ2EEサーバ上にデプロイするときに,Enterprise Beanをカスタマイズして,参照用の名称と実際の名称をlinked-toで結び付けます。
この操作は,サーバ管理コマンドを使用して実行できます。
マッピングの仕組みは,参照側のアプリケーションと参照先のアプリケーションが同じJ2EEアプリケーションか,別のJ2EEアプリケーションかによって異なります。次に,EJBホームインタフェースの名前解決の例として,別のJ2EEアプリケーションのEnterprise Beanを参照する場合と,同じJ2EEアプリケーション内のEnterprise Beanを参照する場合の例を示します。
(a) 別のJ2EEアプリケーションのEnterprise Beanを参照する場合
J2EEアプリケーションから別のJ2EEアプリケーションに含まれるEnterprise Beanを参照する例を,次の図に示します。
java:comp/envを使用する場合,参照側のプログラムのlookupに指定するjava:comp/env下の参照名と実際にJNDI名前空間に登録されているlookup名は,デフォルトで対応づけられます(linked-to)。なお,lookup名をJNDI名前空間に登録されている名称と異なる名称にする場合は,サーバ管理コマンドでカスタマイズする必要があります。図の場合は,PetShopEBをejb/PetShopBeanとして呼び出すようにカスタマイズします。
ユーザ指定名前空間機能を使用する場合,参照側のプログラムのlookupに別名を指定できます。<ejb-ref>の定義は不要です。
(b) 同じJ2EEアプリケーション内のEnterprise Beanを参照する場合
J2EEアプリケーションから同じJ2EEアプリケーションに含まれるEnterprise Beanを参照する例を,次の図に示します。
同じアプリケーション内のEnterprise Beanを呼び出す場合は,lookup名による参照の解決ではなく,<ejb-ref-name>とejb-nameを結び付けて解決します(linked-to)。なお,同一のJ2EEアプリケーションの場合,参照に必要な情報はアプリケーション開発時に判明しているので,DDの<ejb-link>タグに直接ejb-nameを書き込んでおくこともできます。
(2) リソースを参照する仕組みと使い方(resource-ref)
J2EEサーバ内で実行するアプリケーションでリソースアダプタを利用する場合,lookupによるリソース参照の名前解決が必要です。正確には,リソースマネジャへのコネクションを作成するファクトリの名前解決をします。
リソースマネジャへのコネクションを作成するファクトリの名前解決をするためには,次の2種類の作業が必要です。
-
参照側アプリケーションの作成時の作業
アプリケーションの作成時に参照用の名称を決め,Enterprise Beanやサーブレットなどのプログラム内でのlookupの引数に,その参照用の名称を指定します。また,DDの<resource-ref>に,決めた参照用の名称を記載します。
-
参照側アプリケーションのデプロイ時の作業
作成したアプリケーションをJ2EEサーバ上にデプロイするときに,リソースをカスタマイズして,参照用の名称とJ2EEサーバ上に登録済みのリソースをlinked-toで結び付けます。
この操作は,サーバ管理コマンドを使用して実行できます。
次にDB Connector経由でデータベースにアクセスする場合の例を示します。
この例では,リソースの参照名称とリソースの表示名称を結び付けています。