ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server Express Java EE運用ガイド(Java EE 6編)
FUJITSU Software

2.14.1 ネーミングサービス

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

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

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

参照オブジェクト

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

リモート呼出し用Enterprise JavaBean

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

JDBCリソース

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

JMS接続ファクトリ

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

JMS送信先

JMS送信先定義時に指定したJNDI名

コネクタリソース

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

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

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

カスタムリソース

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

外部リソース

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


注意

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

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

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

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

  1. Interstage 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__

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


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

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

対象となるEnterprise JavaBeanにおいてInterstage 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");

Enterprise JavaBeanまたはServlet/JSPからリモートサーバのEnterprise JavaBeanにアクセスする場合

Enterprise JavaBeanまたはServlet/JSPは、通常は同一プロセス上のネーミングサービスにアクセスします。他プロセスまたはリモートサーバのネーミングサービスに登録されたEnterprise JavaBeanにアクセスする場合には、環境ネーミングコンテキストを使用してlookupする参照名にJNDI名を対応付けて使用する必要があります。詳細は、「2.14.2 環境ネーミングコンテキスト(Environment Naming Context)」を参照してください。

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

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

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

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

JNDIブラウズ

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