ページの先頭行へ戻る
Interstage Application Server V13.0.0 GlassFish 設計・構築・運用ガイド
FUJITSU Software

2.14.1 ネーミングサービス

GlassFish Serverクラスターを起動した際に、GlassFish Serverクラスターに定義されたリソースまたは配備されたEnterprise JavaBeanがネーミングサービスに登録されます。例えばJDBCリソースとして「jdbc/Symfo」というJNDI名でリソースを定義した場合、ネーミングサービスに「jdbc/Symfo」という名前でオブジェクトが登録されます。アプリケーションは、「jdbc/Symfo」という名前を指定してJNDIのlookupメソッドを実行すると登録されたオブジェクトを取得できます。このため、GlassFish Serverクラスターに定義するJNDI名は一意である必要があります。

ネーミングサービスに登録されるオブジェクト

ネーミングサービスに登録されるオブジェクトは以下です。

参照オブジェクト

JNDIのlookupメソッドに指定する名前

リモート呼出し用Enterprise JavaBean

リモート呼出し用Enterprise JavaBeanのJNDI名」を参照

JDBCリソース

JDBCリソース定義時に指定したJNDI名

JMS接続ファクトリ

JMS接続ファクトリ定義時に指定したJNDI名

JMS送信先リソース

JMS送信先リソース定義時に指定したJNDI名

コネクタリソース

コネクタリソース定義時に指定したJNDI名

管理オブジェクトリソース

管理オブジェクトリソース定義時に指定したJNDI名

カスタムリソース

カスタムリソース定義時に指定したJNDI名

外部リソース

外部リソース定義時に指定したJNDI名

並行処理リソース

並行処理リソース定義時に指定したJNDI名


注意

  • ローカル呼出し用のEnterprise JavaBeanやWebサービス参照は、GlassFish Serverクラスターのネーミングサービスでは管理されません。これらオブジェクトを利用する場合には、環境ネーミングコンテキストまたはDIを使用してください。

  • JavaMailセッションは、ネーミングサービスから参照しないでください。javax.mail.Sessionオブジェクトが返却されません。JavaMailセッションを使用する場合には、環境ネーミングコンテキストを使用してください。

リモート呼出し用Enterprise JavaBeanのJNDI名

リモート呼出し用Enterprise JavaBeanのJNDI名は、以下の優先順位で決定します。
リモート呼出し用のEnterprise JavaBeanには、Home/Remoteインターフェイスまたはリモートビジネスインターフェイスが定義されます。クライアントからEnterprise JavaBeanを呼び出す場合には、以下で決定したJNDI名でオブジェクトを取得し、そのオブジェクトに対してインターフェイスのメソッドを呼び出します。

  1. GlassFish Serverのdeployment descriptor (glassfish-ejb-jar.xml)ファイルの定義

  2. deployment descriptor (ejb-jar.xml)ファイルの定義

  3. @Stateless/@Stateful/@SingletonアノテーションのmappedName属性の指定

  4. インターフェイス名

上記で決定したJNDI名を元にネーミングサービスには、以下の名前のオブジェクトが登録されます。

名前

説明

JNDI名

ビジネスインターフェイス用のオブジェクトが登録されます。EJB 2.x以前の場合は、Homeインターフェイス用のオブジェクトが登録されます。通常は、この名前を使用します。

JNDI名#ビジネスインターフェイス名

各ビジネスインターフェイスのJNDI名です。
リモートビジネスインターフェイスが複数存在した場合は、この名前で各インターフェイスのメソッドを呼び分けます。詳細は、「リモートビジネスインターフェイスが複数存在した場合のJNDI名」を参照してください。

JNDI名__3_x_Internal_RemoteBusinessHome__

内部制御用のため、アプリケーションからは使用しないでください。


以下にそれぞれの指定方法について説明します。

GlassFish Serverのdeployment descriptor (glassfish-ejb-jar.xml)ファイルの定義

対象となるEnterprise JavaBeanにおいてGlassFish Serverのdeployment descriptor(glassfish-ejb-jar.xml)ファイルのjndi-nameタグにJNDI名を指定します。記述例を以下に示します。

    <ejb>
      <ejb-name>CartBean</ejb-name>
      <jndi-name>Cart</jndi-name>
    </ejb>
deployment descriptor (ejb-jar.xml)ファイルの定義

deployment descriptor(ejb-jar.xml)ファイルのmapped-nameタグにJNDI名を指定します。記述例を以下に示します。

    <enterprise-beans>
      <session>
        <ejb-name>CartBean</ejb-name>
        <mapped-name>Cart</mapped-name>
        ...
      </session>
    </enterprise-beans>
@Stateless/@Stateful/@SingletonアノテーションのmappedName属性の指定

対象となるEnterprise JavaBeanにおいて@Stateless/@Stateful/@SingletonアノテーションのmappedName属性にJNDI名を指定します。記述例を以下に示します。

@Stateless(mappedName="Cart")
public class CartBean implements CartObject { ... }
インターフェイス名

上記のいずれも設定しなかった場合、対象となるEnterprise JavaBeansのインターフェイスの定義によって、以下の論理でデフォルトJNDI名を決定します。

Home/Remoteインターフェイスの定義

リモートビジネスインターフェイスの総数

デフォルトJNDI名

なし

0

なし

なし

なし

1

リモートビジネスインターフェイスの完全修飾クラス名

com.mycompany.CartBusiness

なし

2以上

なし (注1)

なし

あり

0

Homeインターフェイスの完全修飾クラス名

com.mycompany.CartHome

あり

1以上

なし (注2)

なし

注1)

JNDI名を定義する必要があります。また、クライアントから実際にオブジェクトを取得する場合には、使用するインターフェイスごとに使用するJNDI名が異なります。詳細は、「リモートビジネスインターフェイスが複数存在した場合のJNDI名」を参照してください。
注) JNDI名を定義しないとJNDI名が空文字(長さ0の文字列)と認識されます。このため、「#インターフェイス名」や「__3_x_Internal_RemoteBusinessHome__」というオブジェクトが登録され、他のJNDI名と重複する可能性があります。必ずJNDI名を定義してください。

注2)

JNDI名を定義する必要があります。クライアントから実際にオブジェクトを取得する場合、定義したJNDI名を指定するとHomeインターフェイス用のオブジェクトが取得されます。リモートビジネスインターフェイスを使用する場合には、インターフェイスごとに使用するJNDI名が異なります。詳細は、「リモートビジネスインターフェイスが複数存在した場合のJNDI名」を参照してください。
注) JNDI名を定義しないとアプリケーションの起動時にエラーが発生し、アプリケーションが呼び出せない状態となります。必ずJNDI名を定義してください。

リモートビジネスインターフェイスが複数存在した場合のJNDI名

Enterprise JavaBeanのリモートビジネスインターフェイスが複数存在した場合、使用するインターフェイスごとに使用するJNDI名が異なります。Enterprise JavaBeanに指定したJNDI名の後ろに#を付けて使用するインターフェイス名を指定してください。例えば、リモートビジネスインターフェイスとしてcom.ejb.CartBusiness1とcom.ejb.CartBusiness2が定義されたEnterprise JavaBeanに、JNDI名としてCartを指定したとします。この場合には、以下のようにJNDI名を指定してください。

InitialContext ic = new InitialContext();
CartBusiness1 bean1 = (CartBusiness1) ic.lookup("Cart#com.ejb.CartBusiness1");
CartBusiness2 bean2 = (CartBusiness2) ic.lookup("Cart#com.ejb.CartBusiness2");

クライアントからリモートサーバーのネーミングサービスへの接続

クライアントからリモートサーバーのネーミングサービスにIIOP通信でアクセスし、ネーミングサービスが管理するオブジェクトを参照できます。ネーミングサービスにリモート接続する場合には、IIOP通信の環境設定やチューニングパラメタの設定を行ってください。また、クライアントには接続先のホスト名とIIOPのポート番号を設定する必要があります。接続先の設定方法については、「4.12 JNDIの環境設定」を参照してください。

JNDI APIからネーミングサービスの更新

JNDI APIのbindメソッドやunbindメソッドなどを実行してアプリケーションからネーミングサービスの情報を更新(任意のオブジェクトの登録/削除)することもできます。しかし、以下に注意してください。

JNDIブラウズ

ネーミングサービスに登録されたオブジェクトのJNDI名一覧は、asadminコマンドのlist-jndi-entriesサブコマンドで参照できます。