Java Naming and Directory Interface (JNDI) API は、別の種類のネームサービスおよびディレクトリサービスにアクセスするために使用されます。Java EE コンポーネントは、JNDI ルックアップメソッドを起動することによってオブジェクトを検出します。
ここでは、次のテーマを取り上げます。
アプリケーションは JNDI API を呼び出すことにより、リソースとほかのプログラムオブジェクトを検出します。「リソース」は、データベースサーバーやメッセージングシステムなどのシステムへの接続を提供するプログラムオブジェクトです。JDBC リソースはデータソースと呼ばれる場合もあります。それぞれのリソースオブジェクトは人間が理解しやすい 「JNDI 名」という一意の名前で識別されます。リソースオブジェクトと JNDI 名は、Enterprise Server に含まれているネーミングおよびディレクトリサービスによって相互にバインドされています。
新しい名前とオブジェクトのバインドが JNDI に入力されると、新しいリソースが作成されます。
ここでは、次のテーマを取り上げます。
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 ネーミングコンテキスト」として実装し、アプリケーションコンポーネントのインスタンスに提供します。
アプリケーションコンポーネントの環境は次のとおり使用されます。
アプリケーションコンポーネントのビジネスメソッドは JNDI インタフェースを使用して環境にアクセスします。アプリケーションコンポーネントプロバイダは、アプリケーションコンポーネントが実行時に環境内で提供されると期待しているすべての環境エントリを、配備記述子で宣言します。
コンテナは、アプリケーションコンポーネントの環境を格納する JNDI ネーミングコンテキストの実装を提供します。また、コンテナは、配備担当者が各アプリケーションコンポーネントの環境を作成し、管理するツールも提供します。
配備担当者は、コンテナが提供するツールを使用して、アプリケーションコンポーネントの配備記述子で宣言された環境エントリを初期化します。配備担当者は環境エントリの値を設定し、変更します。
コンテナは、実行時にアプリケーションコンポーネントのインスタンスで JNDI コンテキストを利用できるようにします。これらのインスタンスは、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 インスタンス |
Enterprise Server 内で、カスタムリソースおよび外部 JNDI リソース用に環境を設定できます。カスタムリソースはローカル JNDI リポジトリにアクセスし、外部リソースは外部 JNDI リポジトリにアクセスします。どちらのタイプのリソースにも、ユーザーが指定したファクトリクラスの要素や JNDI 名前属性などが必要です。
カスタムリソースは、javax.naming.spi.ObjectFactory インタフェースを実装するサーバー全体のカスタムリソースオブジェクトファクトリを指定します。ここでは、次のテーマを取り上げます。
カスタムリソースを作成するには、リモートモードで create-custom-resource サブコマンドを使用します。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
create-custom-resource(1) サブコマンドを使用して、カスタムリソースを作成します。
サブコマンドのプロパティーについては、サブコマンドのマニュアルページを参照してください。
Enterprise Serverを再起動します。
「ドメインの再起動」を参照してください。
この例では、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 と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
既存のカスタムリソースを一覧表示するには、リモートモードで list-custom-resources サブコマンドを使用します。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
list-custom-resources(1) サブコマンドを使用して、カスタムリソースを一覧表示します。
この例では、既存のカスタムリソースを一覧表示します。
asadmin> list-custom-resources sample_custom_resource01 sample_custom_resource02 Command list-custom-resources executed successfully |
コマンド行に asadmin help list-custom-resources と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
list-custom-resources(1) サブコマンドを使用して、カスタムリソースを一覧表示します。
set(1) サブコマンドを使用して、カスタム JNDI リソースを変更します。
この例では、カスタムリソースを変更します。
asadmin> set server.resources.custom-resource.custom /my-custom-resource.property.value=2010server.resources.custom-resource.custom /my-custom-resource.property.value=2010 |
カスタムリソースを削除するには、リモートモードで delete-custom-resource サブコマンドを使用します。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
list-custom-resources(1) サブコマンドを使用して、カスタムリソースを一覧表示します。
delete-custom-resource(1) サブコマンドを使用して、カスタムリソースを削除します。
この例では、sample-custom-resource という名前のカスタムリソースを削除します。
asadmin> delete-custom-resource sample_custom_resource Command delete-custom-resource executed successfully. |
コマンド行に asadmin help delete-custom-resource と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
Enterprise Server 上で動作しているアプリケーションでは、外部 JNDI リポジトリに保存されているリソースへのアクセスが必要となる場合があります。たとえば、汎用の Java オブジェクトを Java スキーマに従って LDAP サーバーに格納する場合があります。外部 JNDI リソース要素を使用すると、このような外部リソースリポジトリを設定できます。
ここでは、次のテーマを取り上げます。
外部 JNDI リソースを登録するには、リモートモードで create-jndi-resource サブコマンドを使用します。
外部 JNDI ファクトリは、javax.naming.spi.InitialContextFactory インタフェースを実装する必要があります。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
create-jndi-resource(1) サブコマンドを使用して、外部 JNDI リソースを登録します。
サブコマンドのプロパティーについては、サブコマンドのマニュアルページを参照してください。
Enterprise Serverを再起動します。
「ドメインの再起動」を参照してください。
この例では、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 と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
既存の JNDI リソースをすべて表示するには、リモートモードで list-jndi-resources サブコマンドを使用します。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
list-jndi-resources(1) サブコマンドを使用して、既存の JNDI リソースを一覧表示します。
この例では、JNDI リソースを一覧表示します。
asadmin> list-jndi-resources jndi_resource1 jndi_resource2 jndi_resource3 Command list-jndi-resources executed successfully |
コマンド行に asadmin help list-jndi-resources と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
JNDI ツリーでエントリを参照および一覧表示するには、リモートモードで list-jndi-entries サブコマンドを使用します。すべてのエントリを表示するか、JNDI コンテキストまたはサブコンテキストを指定して特定のエントリだけを一覧表示できます。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
list-jndi-entries(1) サブコマンドを使用して、構成の JNDI エントリを一覧表示します。
この例では、ネームサービスの JNDI エントリをすべて表示します。
asadmin> list-jndi-entries jndi_entry03 jndi_entry72 jndi_entry76 Command list-jndi-resources executed successfully |
コマンド行に asadmin help list-jndi-entries と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
list-jndi-resources(1) サブコマンドを使用して、既存の JNDI リソースを一覧表示します。
set(1) サブコマンドを使用して、外部 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 |
JNDI リソースを削除するには、リモートモードで delete-jndi-resource サブコマンドを使用します。
サーバーが実行されていることを確認します。
リモートサブコマンドには、実行中のサーバーが必要です。
delete-jndi-resource(1) サブコマンドを使用して、外部 JNDI エントリを削除します。
この例では、外部 JNDI リソースを削除します。
asadmin> delete-jndi-resource jndi_resource2 Command delete-jndi-resource executed successfully. |
コマンド行に asadmin help delete-jndi-resource と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。
<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>