ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server 移行ガイド
Interstage

2.18 JNDI

1)リソースの参照

J2EE機能の場合

J2EE機能の場合、以下のように処理が実行されることにより、アプリケーションからJNDIのAPIを実行してリソースを参照することができます。

  1. deployment descriptorファイルの情報からリソース種別とリソースの定義名を特定

    deployment descriptorファイルのリソース参照(<resource-ref>タグ)に定義された情報から、名前(<res-ref-name>タグの値)のサブコンテキスト("jdbc/"など)や、型(<res-type>の値)を元に参照するリソース種別(JDBCデータソースなど)を特定します。

    リソースごとに決められたサブコンテキスト(JDBCデータソースの場合には"jdbc/")以降の名前をリソースの定義名として認識します。

    サブコンテキストが指定されていない場合は、<res-ref-name>の値をそのまま定義名として認識します。

    このため、deployment descriptorファイルの<res-ref-name>タグの値にはリソース種別を示すサブコンテキストを定義し、運用環境に設定された名前はサブコンテキストを定義しないことが一般的です。(サブコンテキストが定義されていない場合はリソース種別から特定し、それでも特定できない場合は各リソース定義を順番に確認します。)

    また、deployment descriptorファイルに定義した名前と実際に運用環境に設定された名前が異なる場合には、名前変換定義によりファイルに定義した名前を運用環境に設定された名前にマッピングすることもできます。

  2. 各リソースの定義情報からオブジェクトリファレンスを生成

    アプリケーションが動作するマシンのリソース定義から、特定したリソース種別の定義情報を読み込んでオブジェクトリファレンスを作成します。

  3. 環境ネーミングコンテキストにオブジェクトリファレンスを登録

    作成したオブジェクトリファレンスはアプリケーションごとの環境ネーミングコンテキストに登録されます。

  4. JNDIのlookupメソッドを使用してオブジェクトリファレンスを取得

    アプリケーションでJNDIのlookupメソッドを実行すると環境ネーミングコンテキストからオブジェクトリファレンスを取得します。

    lookupメソッドの引数に"java:comp"を付けても付けなくても環境ネーミングコンテキストからオブジェクトリファレンスを取得します。

以下はEnterprise JavaBeansでオブジェクトリファレンスを取得する場合の例です。


Java EE機能の場合

Java EE機能の場合、以下のように処理が実行されることにより、アプリケーションからJNDIのAPIを実行してリソースを参照することができます。

  1. 定義されたリソースの情報からオブジェクトリファレンスを生成

    サーバーインスタンスをターゲットとして定義された各リソースの情報からオブジェクトリファレンスを生成します。

  2. ネーミングサービスにオブジェクトリファレンスを登録

    ネーミングサービスにJNDI名を名前としてオブジェクトリファレンスを登録します。すべてのリソースの情報がJNDI名をキーにして一元管理されるため、JNDI名は他のリソースとも重複しないように定義する必要があります。

  3. deployment descriptorファイルの情報からオブジェクトリファレンスの参照情報を生成

    deployment descriptorファイルのリソース参照(<resource-ref>タグ)に定義された名前(<res-ref-name>の値)もしくはアノテーションの指定値でネーミングサービスに登録されたオブジェクトリファレンスの参照情報を生成します。

    対象となるリソースのJNDI名は「Java EE運用ガイド」の「3.11.2 環境ネーミングコンテキスト(Environment Naming Context)」に記載された方法で特定します。

    このため、deployment descriptorファイルの<res-ref-name>タグの値と運用環境のリソース定義に定義するJNDI名には両方ともサブコンテキスト("jdbc/"など)を定義することが一般的です。

    また、deployment descriptorファイルに定義した名前もしくはアノテーションで指定した名前と実際に運用環境に設定された名前が異なる場合には、Interstage deployment descriptorファイルの<resource-ref>タグの指定によってdeployment descriptorファイルに定義した名前を運用環境に設定されたJNDI名にマッピングすることもできます。

  4. オブジェクトリファレンスの参照情報を環境ネーミングコンテキスト登録

    オブジェクトリファレンスの参照情報を環境ネーミングコンテキストに登録します。

  5. JNDIのlookupメソッドを実行して環境ネーミングコンテキストから参照情報を取得

    アプリケーションでは"java:comp"を付けてJNDIのlookupメソッドを実行すると環境ネーミングコンテキストから参照情報を取得します。

  6. 環境ネーミングコンテキストの情報からネーミングサービスのオブジェクトリファレンスを取得

    環境ネーミングコンテキストから取得した参照情報からネーミングサービスのオブジェクトリファレンスを取得します。

    このため、"java:comp"を付けてJNDIのlookupメソッドを実行する場合には、必ずdeployment descriptorファイルに参照情報を指定するか、アノテーションを定義する必要があります。

    "java:comp"を付けずにlookupメソッドを実行するとネーミングサービスからオブジェクトリファレンスを直接取得します。

    以下はEnterprise JavaBeansでオブジェクトリファレンスを取得する場合の例です。


2)EJBの参照

J2EE機能の場合

J2EE機能の場合、以下のように処理が実行されることにより、アプリケーションからJNDIのAPIを実行してEnterprise JavaBeansを参照することができます。

  1. Enterprise JavaBeansの配備でCORBAサービスのネーミングサービスにオブジェクトリファレンスを登録

    IIOP通信で呼び出し可能なEnterprise JavaBeansを配備すると、配備時にCORBAサービスのネーミングサービスにオブジェクトリファレンスが登録されます。

  2. deployment descriptorファイルの情報から参照するEnterprise JavaBeansを特定

    呼び出し元のアプリケーションでdeployment descriptorファイルのEJB参照(<ejb-ref>タグもしくは<ejb-local-ref>タグ)に定義された情報から、名前(<ejb-ref-name>タグの値)から参照するEnterprise JavaBeansを特定します。

    サブコンテキスト("ejb/")以降の名前をEJBアプリケーション名として認識します。

    サブコンテキストが指定されていない場合は、<ejb-ref-name>の値をそのままEJBアプリケーション名として認識します。

  3. 定義情報からオブジェクトリファレンスを生成もしくは取得

    <ejb-local-ref>タグの場合やIJServerがWebアプリケーションとEJBアプリケーションを同一のJavaVMで運用する形態の場合、IJServerに配備されたアプリケーションの情報からオブジェクトリファレンスを生成します。

    上記以外の場合には以下のCORBAサービスのネーミングサービスから、EJBアプリケーションの配備時に登録されたオブジェクトリファレンスを取得します。

    運用形態

    対象のネーミングサービス

    Interstageの運用形態がTYPE1もしくはTYPE2の場合

    自サーバーのネーミングサービス

    Interstageの運用形態がTYPE3の場合

    初期化時に指定した他サーバーのネーミングサービス

    クライアント環境の場合

    odsethostで指定したサーバーのネーミングサービス

    このため、deployment descriptorファイルの<ejb-ref-name>タグの値にはサブコンテキスト("ejb/")を定義し、運用環境に設定された名前はサブコンテキストを定義しないことが一般的です。(サブコンテキストが定義されていない場合は、指定された値をそのままEJBアプリケーション名として認識します。)

    また、deployment descriptorファイルに定義した名前と実際に運用環境に設定された名前が異なる場合には、名前変換定義によりファイルに定義した名前を運用環境に設定された名前にマッピングすることもできます。

  4. 環境ネーミングコンテキストにオブジェクトリファレンスを登録

    作成したオブジェクトリファレンスはアプリケーションごとの環境ネーミングコンテキストに登録されます。

  5. JNDIのlookupメソッドを使用してオブジェクトリファレンスを取得

    アプリケーションでJNDIのlookupメソッドを実行すると環境ネーミングコンテキストからオブジェクトリファレンスを取得します。

    lookupメソッドの引数に"java:comp"を付けても付けなくても環境ネーミングコンテキストからオブジェクトリファレンスを取得します。

  6. Enterprise JavaBeansの呼び出し

    取得したオブジェクトリファレンスに対して処理を実行するとEnterprise JavaBeansを呼び出すことができます。

以下はEnterprise JavaBeansから他IJServerで運用されているEnterprise JavaBeansを呼び出す場合の例です。


Java EE機能の場合

Java EE機能の場合、以下のように処理が実行されることにより、アプリケーションからJNDIのAPIを実行してEnterprise JavaBeansを参照することができます。

  1. 配備されたEnterprise JavaBeansの情報からオブジェクトリファレンスを生成

    サーバーインスタンスをターゲットとして配備されたEnterprise JavaBeansの情報からオブジェクトリファレンスを生成します。

  2. ネーミングサービスにオブジェクトリファレンスを登録

    生成されたオブジェクトリファレンスはネーミングサービスにJNDI名を名前としてオブジェクトリファレンスとして登録して一元管理されます。

このため、JNDI名は各リソースとも重複しないように定義する必要があります。

  1. deployment descriptorファイルの情報からオブジェクトリファレンスの参照情報を生成

    deployment descriptorファイルのEJB参照(<ejb-ref>タグもしくは<ejb-local-ref>タグ)に定義された名前(<ejb-ref-name>の値)もしくはアノテーションの指定値でネーミングサービスとの参照情報を生成します。

    対象となるEnterprise JavaBeansの名前は「Java EE運用ガイド」の「環境ネーミングコンテキスト(Environment Naming Context)」に記載された方法で特定します。

    また、deployment descriptorファイルに定義した名前もしくはアノテーションで指定した名前と実際に運用環境に設定された名前が異なる場合には、Interstage deployment descriptorファイルの<resource-ref>タグの指定によってdeployment descriptorファイルに定義した名前を運用環境に設定されたJNDI名にマッピングすることもできます。

    特にJava EE機能ではシステムで一元管理されたネーミングサービスが存在しないため、異なるサーバーインスタンスのEnterprise JavaBeansを呼び出す場合にはJNDIサービスの設定に呼び出すEnterprise JavaBeansのサーバーインスタンスのURLを指定するか、もしくはマッピングするJNDI名に参照するサーバーインスタンスの接続先を指定するINS形式で指定する必要があります。

  2. オブジェクトリファレンスの参照情報を環境ネーミングコンテキスト登録

    オブジェクトリファレンスの参照情報を環境ネーミングコンテキストに登録します。

  3. JNDIのlookupメソッドを実行して環境ネーミングコンテキストから参照情報を取得

    アプリケーションでは"java:comp"を付けてJNDIのlookupメソッドを実行すると環境ネーミングコンテキストから参照情報を取得します。

  4. 環境ネーミングコンテキストの情報からネーミングサービスのオブジェクトリファレンスを取得

    環境ネーミングコンテキストから取得した参照情報からネーミングサービスのオブジェクトリファレンスを取得します。

    このため、"java:comp"を付けてJNDIのlookupメソッドを実行する場合には、必ずdeployment descriptorファイルに参照情報を指定するか、アノテーションを定義する必要があります。

    "java:comp"を付けずにlookupメソッドを実行するとネーミングサービスからオブジェクトリファレンスを直接取得します。

  5. Enterprise JavaBeansの呼び出し

    取得したオブジェクトリファレンスに対して処理を実行するとEnterprise JavaBeansを呼び出すことができます。

以下はEnterprise JavaBeansから他サーバーインスタンスで運用されているEnterprise JavaBeansを呼び出す場合の例です。


3)クライアント環境でのJNDIの利用

J2EE機能の場合

クライアントでJNDIを使用する場合も上記のIJServerを利用した場合と同様です。IJServerはdeployment descriptorファイルをIJServer起動時もしくはHotDeploy実行時に読み込んで環境ネーミングコンテキストにオブジェクトリファレンスを登録しますが、クライアントの場合にはInitialContextクラスのオブジェクトを生成した時に環境ネーミングコンテキストに各種オブジェクトリファレンスが登録されます。

リソース定義については、クライアントアプリケーションが動作する環境で定義された情報を参照します。

Java EE機能の場合

クライアント環境ではエンドポイント(ホスト名とポート番号)に指定した接続先のサーバーインスタンスのネーミングサービスにアクセスします。

クライアントコンテナ(appclientコマンドでJava EEアプリケーションクライアントを実行)でJNDIを使用する場合、上記のようにサーバーインスタンスのネーミングサービスになる以外は上記のサーバーインスタンスの場合の仕様と同様です。

クライアントコンテナ起動時に環境ネーミングコンテキストに各種オブジェクトリファレンスが登録されます。

javaコマンドを使用してJava SEスタンドアロンクライアントでJNDIを使用する場合には環境ネーミングコンテキストは使用できません。

このため、Java SEスタンドアロンクライアントでJNDIを使用する場合にはJNDIのlookupメソッドの引数に”java:comp"を付けずにエンドポイントに指定した接続先のサーバーインスタンスのネーミングサービスから直接オブジェクトリファレンスを取得する必要があります。

■比較

J2EEの機能名/定義名

Java EEの機能名/定義名

名前変換機能

参照名に対応するJNDI名の指定

INITIAL_CONTEXT_FACTORY(java.naming.factory.initial)の指定

INITIAL_CONTEXT_FACTORY(java.naming.factory.initial)の指定

クライアントの認証ユーザ名

セキュリティコールバックハンドラ

クライアントの認証パスワード

セキュリティコールバックハンドラ

J2EEアプリケーションクライアントのdeployment descriptorファイルの指定

Java EEアプリケーションクライアントのdeployment descriptorファイルの指定

HTTPトンネリング

XMLファイルの検証方法

分散トランザクション制御の指定

CORBAサービスの設定

ホスト名とIIOPリスナーのポート番号の設定

ORBの指定

環境変数の設定

環境変数の設定

クライアント配布物へのクラスパスの設定

リモートインタフェースのクラスパスの設定


名前変換機能

J2EE機能名/定義名

J2EE定義方法

Java EE機能名/定義名

Java EE定義方法

名前変換機能

Interstage管理コンソールの名前変換定義します。

参照名に対応するJNDI名の指定

Interstage deployment descriptorファイルの<ejb-ref>タグ、<resource-ref>タグ、<resource-env-ref>タグ、<message-destination-ref>タグにdeployment descriotprファイルに定義した各参照名に対応するJNDI名を指定します。

名前変換ファイルもしくはinterstage.xmlファイルに指定します。

Interstage deployment descriptorファイルの<ejb-ref>タグ、<resource-ref>タグ、<resource-env-ref>タグ、<message-destination-ref>タグにdeployment descriotprファイルに定義した各参照名に対応するJNDI名を指定します。

JNDI環境プロパティに"EBEproperties"を指定します。

Interstage deployment descriptorファイルの<ejb-ref>タグ、<resource-ref>タグ、<resource-env-ref>タグ、<message-destination-ref>タグにdeployment descriotprファイルに定義した各参照名に対応するJNDI名を指定します。


INITIAL_CONTEXT_FACTORY(java.naming.factory.initial)の指定

J2EE機能名/定義名

J2EE定義方法

Java EE機能名/定義名

Java EE定義方法

INITIAL_CONTEXT_FACTORY(java.naming.factory.initial)の指定

アプレットは"com.fujitsu.interstage.ejb.jndi.FJCNCtxFactoryForClient"

INITIAL_CONTEXT_FACTORY(java.naming.factory.initial)の指定

アプレットでのJNDIの利用はサポートしていません。

クライアントは"com.fujitsu.interstage.j2ee.jndi.InitialContextFactoryForClient"

上記以外は指定しません。もしくは、「com.sun.enterprise.naming.SerialInitContextFactory」を指定します。

IJServerは指定しません。

上記以外は指定しません。もしくは、「com.sun.enterprise.naming.SerialInitContextFactory」を指定します。


クライアントの認証ユーザ名

J2EE機能名/定義名

J2EE定義方法

Java EE機能名/定義名

Java EE定義方法

クライアントの認証ユーザ名

JNDI環境プロパティに"FJUserID"を指定

セキュリティコールバックハンドラ

deployment descriptorファイル (application-client.xml)に任意のセキュリティコールバックハンドラを指定

Java EE機能の詳細は「Java EE運用ガイド」-「認証」を参照してください。


クライアントの認証パスワード

J2EE機能名/定義名

J2EE定義方法

Java EE機能名/定義名

Java EE定義方法

クライアントの認証パスワード

JNDI環境プロパティに"FJPassword"を指定

セキュリティコールバックハンドラ

deployment descriptorファイル (application-client.xml)に任意のセキュリティコールバックハンドラを指定

Java EE機能の詳細は「Java EE運用ガイド」-「認証」を参照してください。


J2EEアプリケーションクライアントのdeployment descriptorファイルの指定

J2EE機能名/定義名

J2EE定義方法

Java EE機能名/定義名

Java EE定義方法

J2EEアプリケーションクライアントのdeployment descriptorファイルの指定

JNDI環境プロパティに"com.fujitsu.interstage.j2ee.DeploymentDescriptorClient"を指定

Java EEアプリケーションクライアントのdeployment descriptorファイルの指定

appclientコマンドでクライアントコンテナ起動時に、-clientオプションで指定するクライアントスタブJARファイルに含まれます。クライアントスタブJARファイルは、サーバ上にアプリケーションクライアントモジュールを配備することで、asadminコマンドのget-client-stubsサブコマンドもしくはInterstage Java EE管理コンソールで取得できます。


HTTPトンネリング

J2EE機能名/定義名

J2EE定義方法

Java EE機能名/定義名

Java EE定義方法

HTTPトンネリング

JNDI環境プロパティに"HTTPGW"を指定

-(HTTPトンネリングはサポートされません。)


XMLファイルの検証方法

J2EE機能名/定義名

J2EE定義方法

Java EE機能名/定義名

Java EE定義方法

XMLファイルの検証方法

VerificationMethod


分散トランザクション制御の指定

J2EE機能名/定義名

J2EE定義方法

Java EE機能名/定義名

Java EE定義方法

分散トランザクション制御の指定

JNDI環境プロパティに"com.fujitsu.ObjectDirector.CORBA.GlobalTransactionMode"を指定

-(自動的に判定を行います。)


CORBAサービスの設定

J2EE機能名/定義名

J2EE定義方法

Java EE機能名/定義名

Java EE定義方法

CORBAサービスの設定

クライアント環境では以下にアクセスするネーミングサービスのホスト名とポート番号を指定します。

C:\Interstage\ODWIN\etc\inithost

ホスト名とIIOPリスナーのポート番号の設定

クライアント環境ではエンドポイントの指定にアクセスするサーバーインスタンスのホスト名とIIOPリスナーのポート番号を指定します。指定されたサーバーインスタンス上で運用されているネーミングサービスにアクセスします。

運用形態にTYPE1を指定したサーバー環境ではローカルホストのネーミングサービスにアクセスします。

サーバー環境ではアプリケーションを運用するサーバーインスタンス上のネーミングサービスにアクセスします。

運用形態にTYPE3を指定したサーバー環境ではInterstage動作環境定義ファイルの"NS Host Name"と"NS Port Number"にアクセスするネーミングサービスのホスト名とポート番号を指定します。

サーバー環境で他サーバーインスタンスで運用されているEnterprise JavaBeansを呼び出す場合には、JNDIサービス設定に他サーバーインスタンスまたはリモートサーバのホスト名、IIOPリスナーのポート番号を指定します。もしくは、deployment descriptorファイルに定義したEJB参照名に対してInteroperable Naming Service(以降、INS)の規則を使用して、他サーバーインスタンスまたはリモートサーバのホスト名、IIOPリスナーのポート番号、JNDI名を指定する必要があります。


ORBの指定

J2EE機能名/定義名

J2EE定義方法

Java EE機能名/定義名

Java EE定義方法

ORBの指定

サーバー環境では自動的に設定されるため不要です。

-(自動的に設定されるため指定不要です)

クライアント環境でアプリケーションを起動するための環境設定として、使用するORB(Object Request Broker)を指定する必要があります。ORBとして以下のプロパティを指定します。

[プロパティ名]org.omg.CORBA.ORBClass

[プロパティ値]com.fujitsu.ObjectDirector.CORBA.ORB

[プロパティ名]org.omg.CORBA.ORBSingletonClass

[プロパティ値]com.fujitsu.ObjectDirector.CORBA.SingletonORB

[プロパティ名]javax.rmi.CORBA.StubClass

[プロパティ値]com.fujitsu.ObjectDirector.rmi.CORBA.StubDelegateImpl

[プロパティ名]javax.rmi.CORBA.UtilClass

[プロパティ値]com.fujitsu.ObjectDirector.rmi.CORBA.UtilDelegateImpl

[プロパティ名]javax.rmi.CORBA.PortableRemoteObjectClass

[プロパティ値]com.fujitsu.ObjectDirector.rmi.CORBA.PortableRemoteObjectDelegateImpl


環境変数の設定

J2EE機能名/定義名

J2EE定義方法

Java EE機能名/定義名

Java EE定義方法

環境変数の設定

サーバー環境では自動的に設定されるため不要です。

環境変数の設定

IJServerクラスタを使用する場合、環境変数は自動的に設定されるため不要です。

クライアント環境でアプリケーションを起動するための環境設定として、環境変数のCLASSPATHとLD_LIBRARY_PATHの設定が必要です。詳細は「J2EE ユーザーズガイド(旧版互換)」を参照してください。

アプリケーションクライアントコンテナを使用する場合、環境変数は自動的に設定されるため不要です。

スタンドアロンクライアントの場合、環境変数CLASSPATHの設定が必要です。


クライアント配布物へのクラスパスの設定

J2EE機能名/定義名

J2EE定義方法

Java EE機能名/定義名

Java EE定義方法

クライアント配布物へのクラスパスの設定

他プロセスで運用されたEJBアプリケーションをIIOP通信で呼び出す場合、呼び出すEJBアプリケーションを配備された時に生成されるクライアント配布物にクラスパスを設定する必要があります。

リモートインタフェースのクラスパスの設定

動的スタブにより通信に必要なクラスは動的にメモリ上に展開されるため、呼び出すEnterprise JavaBeansのリモートインタフェースのみ呼出し側のクラスパスに設定する必要があります。