Sun GlassFish Enterprise Server v3 管理ガイド

第 20 章 Java Naming and Directory Interface (JNDI) サービスの管理

Java Naming and Directory Interface (JNDI) API は、別の種類のネームサービスおよびディレクトリサービスにアクセスするために使用されます。Java EE コンポーネントは、JNDI ルックアップメソッドを起動することによってオブジェクトを検出します。

ここでは、次のテーマを取り上げます。

JNDI について

アプリケーションは JNDI API を呼び出すことにより、リソースとほかのプログラムオブジェクトを検出します。「リソース」は、データベースサーバーやメッセージングシステムなどのシステムへの接続を提供するプログラムオブジェクトです。JDBC リソースはデータソースと呼ばれる場合もあります。それぞれのリソースオブジェクトは人間が理解しやすい 「JNDI 名」という一意の名前で識別されます。リソースオブジェクトと JNDI 名は、Enterprise Server に含まれているネーミングおよびディレクトリサービスによって相互にバインドされています。

新しい名前とオブジェクトのバインドが JNDI に入力されると、新しいリソースが作成されます。

ここでは、次のテーマを取り上げます。

Java EE ネーミング環境

JNDI 名は、Java EE サーバーが提供するネームサービスとディレクトリサービスによってオブジェクトにバインドされます。Java EE コンポーネントは JNDI API を介してこのサービスにアクセスするので、通常オブジェクトはその JNDI 名を使用します。たとえば、PointBase データベースの JNDI 名は jdbc/Pointbase となります。Enterprise Server は、起動時に構成ファイルから情報を読み取り、自動的に JNDI データベース名を名前空間に追加します。そのうちの 1 つが jdbc/Pointbase です。

Java EE アプリケーションクライアント、Enterprise JavaBeans、および Web コンポーネントは、JNDI ネーミング環境にアクセスする必要があります。

アプリケーションコンポーネントのネーミング環境は、配備またはアセンブリの際に、アプリケーションコンポーネントのビジネスロジックのカスタマイズを可能にするメカニズムです。この環境では、コンポーネントからソースコードにアクセスしたりソースコードを変更することなく、アプリケーションコンポーネントをカスタマイズすることができます。Java EE コンテナは、環境を「JNDI ネーミングコンテキスト」として実装し、アプリケーションコンポーネントのインスタンスに提供します。

ネーミング環境とコンテナの動作

アプリケーションコンポーネントの環境は次のとおり使用されます。

各アプリケーションコンポーネントは、自身の一連の環境エントリを定義します。同じコンテナ内のすべてのアプリケーションコンポーネントのインスタンスは、同じ環境エントリを共有します。アプリケーションコンポーネントのインスタンスは、実行時に環境を変更することはできません。

ネーミング参照とバインディング情報

「リソース参照」は、リソース用にコード化されたコンポーネントの名前を識別する配備記述子の要素です。たとえば、jdbc/SavingsAccountDB です。具体的には、コード化された名前はリソースの接続ファクトリを参照します。

リソースの JNDI 名とリソース参照名は同じではありません。このネーミングへのアプローチでは、配備前に 2 つの名前をマップする必要がありますが、同時にコンポーネントをリソースから分離します。この分離により、あとでコンポーネントが別のリソースにアクセスする必要があっても、名前を変更する必要がなくなります。この柔軟性により、既存のコンポーネントから Java EE アプリケーションを簡単にアセンブルすることが可能になります。

次の表に、Enterprise Server で使用される J2EE リソースの JNDI 検索と関連するリソース参照 を示します。

表 20–1 JNDI 検索名と関連する参照

JNDI ルックアップ名 

関連するリソース参照 

java:comp/env

アプリケーション環境エントリ 

java:comp/env/jdbc

JDBC データソースリソースマネージャー接続ファクトリ 

java:comp/env/ejb

EJB 参照 

java:comp/UserTransaction

UserTransaction 参照 

java:comp/env/mail

JavaMail セッション接続ファクトリ 

java:comp/env/url

URL 接続ファクトリ 

java:comp/env/jms

JMS 接続ファクトリと送信先 

java:comp/ORB

アプリケーションコンポーネント間で共有された ORB インスタンス 

JNDI リソースの管理

Enterprise Server 内で、カスタムリソースおよび外部 JNDI リソース用に環境を設定できます。カスタムリソースはローカル JNDI リポジトリにアクセスし、外部リソースは外部 JNDI リポジトリにアクセスします。どちらのタイプのリソースにも、ユーザーが指定したファクトリクラスの要素や JNDI 名前属性などが必要です。

カスタム JNDI リソースの管理

カスタムリソースは、javax.naming.spi.ObjectFactory インタフェースを実装するサーバー全体のカスタムリソースオブジェクトファクトリを指定します。ここでは、次のテーマを取り上げます。

Procedureカスタム JNDI リソースを作成する

カスタムリソースを作成するには、リモートモードで create-custom-resource サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. create-custom-resource(1) サブコマンドを使用して、カスタムリソースを作成します。

    サブコマンドのプロパティーについては、サブコマンドのマニュアルページを参照してください。

  3. Enterprise Serverを再起動します。

    「ドメインの再起動」を参照してください。


例 20–1 カスタムリソースの作成

この例では、sample-custom-resource という名前のカスタムリソースを作成します。


asadmin> create-custom-resource --restype topic --factoryclass com.imq.topic 
sample_custom_resource
Command create-custom-resource executed successfully.

参照

コマンド行に asadmin help create-custom-resource と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedureカスタム JNDI リソースを一覧表示する

既存のカスタムリソースを一覧表示するには、リモートモードで list-custom-resources サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-custom-resources(1) サブコマンドを使用して、カスタムリソースを一覧表示します。


例 20–2 カスタムリソースの一覧表示

この例では、既存のカスタムリソースを一覧表示します。


asadmin> list-custom-resources
sample_custom_resource01 
sample_custom_resource02 
Command list-custom-resources executed successfully

参照

コマンド行に asadmin help list-custom-resources と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedureカスタム JNDI リソースを更新する

  1. list-custom-resources(1) サブコマンドを使用して、カスタムリソースを一覧表示します。

  2. set(1) サブコマンドを使用して、カスタム JNDI リソースを変更します。


例 20–3 カスタム JNDI リソースの更新

この例では、カスタムリソースを変更します。


asadmin> set server.resources.custom-resource.custom
/my-custom-resource.property.value=2010server.resources.custom-resource.custom
/my-custom-resource.property.value=2010

Procedureカスタム JNDI リソースを削除する

カスタムリソースを削除するには、リモートモードで delete-custom-resource サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-custom-resources(1) サブコマンドを使用して、カスタムリソースを一覧表示します。

  3. delete-custom-resource(1) サブコマンドを使用して、カスタムリソースを削除します。


例 20–4 カスタムリソースの削除

この例では、sample-custom-resource という名前のカスタムリソースを削除します。


asadmin> delete-custom-resource sample_custom_resource
Command delete-custom-resource executed successfully.

参照

コマンド行に asadmin help delete-custom-resource と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

外部 JNDI リソースの管理

Enterprise Server 上で動作しているアプリケーションでは、外部 JNDI リポジトリに保存されているリソースへのアクセスが必要となる場合があります。たとえば、汎用の Java オブジェクトを Java スキーマに従って LDAP サーバーに格納する場合があります。外部 JNDI リソース要素を使用すると、このような外部リソースリポジトリを設定できます。

ここでは、次のテーマを取り上げます。

Procedure外部 JNDI リソースを登録する

外部 JNDI リソースを登録するには、リモートモードで create-jndi-resource サブコマンドを使用します。

始める前に

外部 JNDI ファクトリは、javax.naming.spi.InitialContextFactory インタフェースを実装する必要があります。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. create-jndi-resource(1) サブコマンドを使用して、外部 JNDI リソースを登録します。

    サブコマンドのプロパティーについては、サブコマンドのマニュアルページを参照してください。

  3. Enterprise Serverを再起動します。

    「ドメインの再起動」を参照してください。


例 20–5 外部 JNDI リソースの登録

この例では、sample_jndi_resource が登録されています。


asadmin> create-jndi-resource --jndilookupname sample_jndi 
--restype queue --factoryclass sampleClass --description "this is a sample jndi 
resource" sample_jndi_resource
Command create-jndi-resource executed successfully

参照

コマンド行に asadmin help create-jndi-resource と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedure外部 JNDI リソースを一覧表示する

既存の JNDI リソースをすべて表示するには、リモートモードで list-jndi-resources サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-jndi-resources(1) サブコマンドを使用して、既存の JNDI リソースを一覧表示します。


例 20–6 JNDI リソースの一覧表示

この例では、JNDI リソースを一覧表示します。


asadmin> list-jndi-resources
jndi_resource1
jndi_resource2
jndi_resource3
Command list-jndi-resources executed successfully

参照

コマンド行に asadmin help list-jndi-resources と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedure外部 JNDI エントリを一覧表示する

JNDI ツリーでエントリを参照および一覧表示するには、リモートモードで list-jndi-entries サブコマンドを使用します。すべてのエントリを表示するか、JNDI コンテキストまたはサブコンテキストを指定して特定のエントリだけを一覧表示できます。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. list-jndi-entries(1) サブコマンドを使用して、構成の JNDI エントリを一覧表示します。


例 20–7 JNDI エントリの一覧表示

この例では、ネームサービスの JNDI エントリをすべて表示します。


asadmin> list-jndi-entries
jndi_entry03
jndi_entry72
jndi_entry76
Command list-jndi-resources executed successfully

参照

コマンド行に asadmin help list-jndi-entries と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedure外部 JNDI リソースを更新する

  1. list-jndi-resources(1) サブコマンドを使用して、既存の JNDI リソースを一覧表示します。

  2. set(1) サブコマンドを使用して、外部 JNDI リソースを変更します。


例 20–8 外部 JNDI リソースの更新

この例では、外部リソースを変更します。


asadmin> set server.resources.external-jndi-resource.my-jndi-resource.
jndi-lookup-name=bar server.resources.external-jndi-resource.my-jndi-resource.jndi-lookup-name=bar 

Procedure外部 JNDI リソースを削除する

JNDI リソースを削除するには、リモートモードで delete-jndi-resource サブコマンドを使用します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. delete-jndi-resource(1) サブコマンドを使用して、外部 JNDI エントリを削除します。


例 20–9 外部 JNDI リソースの削除

この例では、外部 JNDI リソースを削除します。


asadmin> delete-jndi-resource jndi_resource2
Command delete-jndi-resource executed successfully.

参照

コマンド行に asadmin help delete-jndi-resource と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

外部 JNDI リソースの使用例

<resources>
 <!-- external-jndi-resource element specifies how to access J2EE resources
 -- stored in an external JNDI repository. This example
 -- illustrates how to access a java object stored in LDAP.
 -- factory-class element specifies the JNDI InitialContext factory that
 -- needs to be used to access the resource factory. property element
 -- corresponds to the environment applicable to the external JNDI context
 -- and jndi-lookup-name refers to the JNDI name to lookup to fetch the
 -- designated (in this case the java) object.
 -->
  <external-jndi-resource jndi-name="test/myBean"
      jndi-lookup-name="cn=myBean"
      res-type="test.myBean"
      factory-class="com.sun.jndi.ldap.LdapCtxFactory">
    <property name="PROVIDER-URL" value="ldap://ldapserver:389/o=myObjects" />
    <property name="SECURITY_AUTHENTICATION" value="simple" />
    <property name="SECURITY_PRINCIPAL", value="cn=joeSmith, o=Engineering" />
    <property name="SECURITY_CREDENTIALS" value="changeit" />
  </external-jndi-resource>
</resources>