ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server Java EE運用ガイド

3.11.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インタフェースまたはEJB3.0のリモートビジネスインタフェースが定義されます。クライアントからEnterprise JavaBeanを呼び出す場合には、以下で決定したJNDI名でオブジェクトを取得し、そのオブジェクトに対してインタフェースのメソッドを呼び出します。

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

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

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

  4. インタフェース名


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

名前

説明

JNDI名

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

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

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

JNDI名__3_x_Internal_RemoteBusinessHome__

EJB3.0以降の場合は、登録されます。
内部制御用のため、アプリケーションからは使用しないでください。


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

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

対象となるEnterprise JavaBeanにおいてInterstage deployment descriptor(sun-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名を指定します。記述例を以下に示します。
EJB3.0以降のEnterprise JavaBeansの場合、利用できます。

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

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

@Stateless(mappedName="Cart")
public class CartBean implements CartObject { ... }

インタフェース名

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

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

EJB3.0以降のリモートビジネスインタフェースの総数

デフォルト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名を対応付けて使用する必要があります。詳細は、「3.11.2 環境ネーミングコンテキスト(Environment Naming Context)」を参照してください。

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

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

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

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

JNDIブラウズ

ネーミングサービスに登録されたオブジェクトのJNDI名一覧は、Interstage Java EE管理コンソールのJNDIブラウズ、またはasadminコマンドのlist-jndi-entriesサブコマンドで参照できます。
Interstage Java EE管理コンソールを使用した場合、ツリーの「IJServerクラスタ」ノードを展開し、目的のサーバーインスタンスを選択した画面で[JNDIブラウズ]を選択してください。表示されるJNDIツリーのブラウズで、ネーミングサービスに登録されているオブジェクトを選択すると、以下を確認できます。

項目

内容

名前

JNDI名が表示されます。

クラス名

登録されているオブジェクトのクラス名が表示されます。選択したオブジェクトにより以下が表示されます。

  • サブコンテキストの場合、クラス名には以下が表示されます。
      com.sun.enterprise.naming.TransientContext

  • オブジェクトのリファレンス情報の場合、以下が表示されます。このオブジェクトは、リモートクライアントからJNDI APIを実行すると、JNDIサービスプロバイダはサーバから取得したリファレンス情報から実際のオブジェクトを生成して返却します。詳細は、javax.naming.ReferenceのJavadocを参照してください。
      javax.naming.Reference

  • 上記以外の場合、実際のオブジェクトがネーミングサービスに登録されており、オブジェクトのクラス名が表示されます。

ターゲット

リソースが有効なターゲット(IJServerクラスタ名または「server」)が表示されます。以下を選択した場合は、表示されません。

  • サブコンテキスト

  • リモート呼出し用Enterprise JavaBeanのオブジェクト

  • コンテナが自動的に登録したオブジェクト

  • アプリケーションで登録したオブジェクト


注意

システムが利用するオブジェクト(UserTransactionなど)やアプリケーション(ejb/mgmt)、__pmを付加したリソースの名前も表示されます。