この節では、Java Naming and Directory Interface (JNDI) について説明します。JNDI は、さまざまな種類のネーミングおよびディレクトリサービスにアクセスするための API (Application Programming Interface) です。J2EE コンポーネントは、JNDI 検索メソッドを起動することによってオブジェクトを検出します。
この節では、次の項目について説明します。
JNDI は、Java Naming and Directory Interface API の略語です。API を呼び出すことにより、アプリケーションはリソースとほかのプログラムオブジェクトを検出します。リソースとは、データベースサーバーやメッセージングシステムなどのシステムへの接続を提供するプログラムオブジェクトです。JDBC リソースはデータソースと呼ばれる場合もあります。それぞれのリソースオブジェクトは人間が理解しやすい JNDI 名という一意の名前で識別されます。リソースオブジェクトと JNDI 名は、Application Server に含まれているネーミングおよびディレクトリサービスによって相互にバインドされています。新しいリソースを作成すると、JNDI に新しい名前とオブジェクトのバインドが入力されます。
JNDI 名は人間が理解しやすいオブジェクトの名前です。これらの名前は、J2EE サーバーが提供するネームサービスとディレクトリサービスによってオブジェクトにバインドされます。J2EE コンポーネントは JNDI API を介してこのサービスにアクセスするので、通常オブジェクトはその JNDI 名を使用します。たとえば、PointBase データベースの JNDI 名は jdbc/Pointbase となります。Application Server は、起動時に設定ファイルから情報を読み込み、JNDI データベース名を自動的に名前空間に追加します。
J2EE アプリケーションクライアント、Enterprise JavaBeans、および Web コンポーネントは、JNDI ネーミング環境にアクセスする必要があります。
アプリケーションコンポーネントのネーミング環境は、配備またはアセンブリの際に、アプリケーションコンポーネントのビジネスロジックのカスタマイズを可能にするメカニズムです。このアプリケーションコンポーネントの環境を使用することにより、アプリケーションコンポーネントのソースコードにアクセスしたり、このソースコードを変更したりせずに、アプリケーションコンポーネントをカスタマイズできます。
J2EE コンテナはアプリケーションコンポーネントの環境を実装し、この環境をアプリケーションコンポーネントのインスタンスに JNDI ネーミングコンテキストとして提供します。アプリケーションコンポーネントの環境は次のとおり使用されます。
アプリケーションコンポーネントのビジネスメソッドは JNDI インタフェースを使用して環境にアクセスします。アプリケーションコンポーネントプロバイダは、実行時にその環境に用意されるとアプリケーションコンポーネントが想定する、環境エントリのすべてを配備記述子で宣言します。
コンテナは、アプリケーションコンポーネントの環境を格納する JNDI ネーミングコンテキストの実装を提供します。また、コンテナは、配備担当者が各アプリケーションコンポーネントの環境を作成し、管理するツールも提供します。
配備担当者は、コンテナが提供するツールを使用して、アプリケーションコンポーネントの配備記述子で宣言された環境エントリを初期化します。配備担当者は環境エントリの値を設定し、変更します。
コンテナは、実行時にアプリケーションコンポーネントのインスタンスで、環境ネーミングコンテキストを利用できるようにします。アプリケーションコンポーネントのインスタンスは、JNDI インタフェースを使用して環境エントリの値を取得します。
各アプリケーションコンポーネントは、自身の一連の環境エントリを定義します。同じコンテナ内のすべてのアプリケーションコンポーネントのインスタンスは、同じ環境エントリを共有します。アプリケーションコンポーネントのインスタンスは、実行時に環境を変更することはできません。
リソース参照は、リソース用にコード化されたコンポーネントの名前を識別する配備記述子の要素です。具体的には、コード化された名前はリソースの接続ファクトリを参照します。次の節で説明する例では、リソース参照名は jdbc/SavingsAccountDB です。
リソースの JNDI 名とリソース参照名とは同じではありません。このネーミングへのアプローチでは、配備前に 2 つの名前をマップする必要がありますが、同時にコンポーネントをリソースから分離します。この分離により、あとでコンポーネントが別のリソースにアクセスする必要があっても、名前を変更する必要がなくなります。この柔軟性により、既存のコンポーネントから J2EE アプリケーションを簡単にアセンブルすることが可能になります。
次の表には、Application Server が使用する J2EE リソースの JNDI 検索と関連する参照が一覧表示されています。
表 6–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 リポジトリにアクセスし、外部リソースは外部 JNDI リポジトリにアクセスします。両方のリソースのタイプが、ユーザー指定のファクトリクラス要素、JNDI 名属性などを必要とします。この節では、J2EE リソースの JNDI 接続ファクトリリソースを設定し、これらのリソースにアクセスする方法を説明します。
Application Server では、list-jndi-entities と同様に、リソースを作成、削除、一覧表示することができます。
管理コンソールの左側の区画で、JNDI 設定を変更する Application Server インスタンスを開きます。
「JNDI」タブを開き、「カスタムリソース」をクリックします。
カスタムリソースがすでに作成されている場合、それらが右側の区画に表示されます。新しいカスタムリソースを作成するには、「新規」をクリックします。「JNDI」タブを開き、「新規」をクリックします。新しいカスタムリソースを追加するページが表示されます。
「JNDI 名」フィールドで、リソースへのアクセスに使用する名前を入力します。
この名前は JNDI ネームサービスに登録されます。
「リソースタイプ」フィールドで、上記の例に示すとおり完全修飾タイプの定義を入力します。
リソースタイプの定義は、xxx.xxx の形式に従います。
「ファクトリクラス」フィールドで、作成するカスタムリソースのファクトリクラス名を入力します。
「ファクトリクラス」はファクトリクラスのユーザー指定の名前です。このクラスは javax.naming.spi.ObjectFactory インタフェースを実装します。
「説明」フィールドで、作成するリソースの説明を入力します。
この説明は文字列値で、最大 250 文字を入力することができます。
「追加プロパティー」セクションで、プロパティー名およびプロパティー値を追加します。
「カスタムリソースを有効」チェックボックスにチェックマークを付けて、カスタムリソースを有効にします。
「了解」をクリックして、カスタムリソースを保存します。
クラスタまたはスタンドアロンインスタンスにカスタムリソースが配備されている場合、「ターゲット」タブを使用してターゲットを管理できます。「ターゲット」タブは、カスタムリソースの作成後に表示されます。ターゲット名を入力して「了解」をクリックし、ターゲットを設定します。
create-custom-resource
管理コンソールの左側の区画で、JNDI 設定を変更する Application Server インスタンスを開きます。
「JNDI」を開き、「カスタムリソース」を選択します。
カスタムリソースがすでに作成されている場合、それらが右側の区画に表示されます。
右側の区画のファイル名をクリックします。
「リソースタイプ」フィールド、「ファクトリクラス」フィールド、または「説明」フィールドを編集します。
「カスタムリソースを有効」チェックボックスにチェックマークを付けて、カスタムリソースを有効にします。
「保存」をクリックして、カスタムリソースの変更を保存します。
管理コンソールの左側の区画で、「JNDI」タブを開きます。
「カスタムリソース」をクリックします。
カスタムリソースがすでに作成されている場合、それらが右側の区画に表示されます。
削除するリソース名の横にあるボックスをクリックします。
「削除」をクリックします。カスタムリソースが削除されます。
カスタムリソースを一覧表示するには、asadmin list-custom-resources コマンドを入力します。たとえば、ホスト plum 上のカスタムリソースを一覧表示するには、次のように入力します。
$asadmin list-custom-resources --host plum target6 |
コマンドの完全なコンテキストを確認するには、asadmin help list-custom-resources と入力してください。
通常、Application Server で実行中のアプリケーションは、外部 JNDI リポジトリに格納されているリソースにアクセスする必要があります。たとえば、一般的な Java オブジェクトは、Java スキーマのように LDAP サーバーに格納できます。外部 JNDI リソースの要素を使用すると、このような外部リソースリポジトリを設定できます。外部 JNDI ファクトリは、javax.naming.spi.InitialContextFactory インタフェースを実装する必要があります。
外部 JNDI リソースの使用例を示します。
<resources> <!-- external-jndi-resource 要素は、外部 JNDI リポジトリに格納されて -- いる J2EE リソースへのアクセス方法を指定します。次の例は、 -- LDAP に格納されている Java オブジェクトへのアクセス方法を示します。 -- factory-class 要素は、リソースファクトリへのアクセスに使用される -- JNDI InitialContext ファクトリを指定します。property 要素は -- 外部 JNDI コンテキストに適用可能な環境に対応します。 -- jndi-lookup-name は、指定の (この例では Java) オブジェクトを検出して -- フェッチするための JNDI 名を参照します。 --> <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>
管理コンソールの左側の区画で、JNDI 設定を変更する Application Server インスタンスを開きます。
「JNDI」を開き、「外部リソース」を選択します。
外部リソースがすでに作成されている場合、それらが右側の区画に表示されます。
新しい外部リソースを作成するには、「新規」をクリックします。
「JNDI 名」フィールドで、リソースへのアクセスに使用する名前を入力します。
この名前は JNDI ネームサービスに登録されます。
「リソースタイプ」フィールドで、上記の例に示すとおり完全修飾タイプの定義を入力します。
リソースタイプの定義は、xxx.xxx の形式に従います。
「JNDI 検索」フィールドで、外部リポジトリを検索する JNDI 値を入力します。
たとえば、外部リポジトリに接続し、Bean クラスをテストする外部リソースを作成する場合、「JNDI 検索」は次のようになります。cn=testmybean
「ファクトリクラス」フィールドで、JNDI ファクトリクラスの外部リポジトリを com.sun.jndi.ldap のように入力します。
このクラスは javax.naming.spi.ObjectFactory インタフェースを実装します。
「説明」フィールドには、作成するリソースの説明を入力します。
この説明は文字列値で、最大 250 文字を入力することができます。
「追加プロパティー」セクションで、プロパティー名およびプロパティー値を追加します。
「外部リソースを有効」チェックボックスにチェックマークを付けて、外部リソースを有効にします。
「了解」をクリックして、外部リソースを保存します。
クラスタまたはスタンドアロンインスタンスに外部リソースが配備されている場合、「ターゲット」タブを使用してターゲットを管理できます。「ターゲット」タブは、外部リソースの作成後に表示されます。ターゲット名を入力して「了解」をクリックし、ターゲットを設定します。
管理コンソールの左側の区画で、JNDI 設定を変更する Application Server インスタンスを開きます。
「JNDI」を開き、「外部リソース」を選択します。
外部リソースがすでに作成されている場合、それらが右側の区画に表示されます。
外部リソースを編集するには、右側の区画のファイル名をクリックします。
「リソースタイプ」フィールド、「JNDI 検索」フィールド、「ファクトリクラス」フィールド、または「説明」フィールドを編集します。
「外部リソースを有効」チェックボックスにチェックマークを付けて、外部リソースを有効にします。
「保存」をクリックして、外部リソースの変更を保存します。
管理コンソールの左側の区画で、「JNDI」タブを開きます。
「外部リソース」をクリックします。
外部リソースがすでに作成されている場合、それらが右側の区画に表示されます。
削除するリソース名の横にあるボックスをクリックします。
「削除」をクリックします。外部リソースが削除されます。
外部リソースを一覧表示するには、asadmin list-jndi-resources コマンドを入力して JNDI 名を指定します。たとえば、外部リソースを一覧表示するには、次のように入力します。
$asadmin list-jndi-resources --user adminuser --host plum jndi_name_test
コマンドの完全なコンテキストを確認するには、asadmin help list-jndi-resources と入力してください。