モジュール java.naming
パッケージ javax.naming.ldap

インタフェースLdapContext

すべてのスーパー・インタフェース:
Context, DirContext
既知のすべての実装クラス:
InitialLdapContext

public interface LdapContext extends DirContext
このインタフェースは、LDAPv3スタイルのコントロールを持つ操作とLDAPv3スタイルの拡張操作を実行できるコンテキストを表します。 このような制御や拡張操作を必要としないアプリケーションでは、より汎用的なjavax.naming.directory.DirContextをかわりに使用する必要があります。

コントロールの使用についての詳細

このインタフェースは、LDAP v3コントロールをサポートします。 このサポートでは、ユーザー・プログラムが、ユーザー・プログラムのContext/DirContextメソッドの呼び出し中に実行されるLDAP操作のリクエスト制御を設定し、LDAP操作によって発生するレスポンス制御を読み取ることができます。 実装レベルでは、要求コントロールと応答コントロールを正しく使用するために、ユーザー・プログラムおよびサービス・プロバイダ両方の開発者が理解する必要のある詳細事項があります。

RequestControls

要求コントロールには次の2つのタイプがあります。

  • 接続の作成方法に影響する要求コントロール
  • コンテキスト・メソッドに影響する要求コントロール
接続の作成方法に影響する要求コントロールは、LDAPサーバーとの接続の設定または再設定のどちらの場合でも使用されます。 コンテキスト・メソッドに影響する要求コントロールは、他のすべてのLDAP操作がLDAPサーバーに送られるときに使用されます。 これら2つの要求コントロールに違いが生じるのは、JNDIが高レベルAPIで接続を直接処理しないためです。 必要な接続は、サービス・プロバイダで管理されます。 したがって、単一の接続は複数のコンテキスト・インスタンスによって共有されることがあります。サービス・プロバイダは、自由に自分のアルゴリズムを使用して接続とネットワークの使用を保護します。 この場合、コンテキスト・インスタンス上でメソッドが呼び出されたときに、サービス・プロバイダは、対応するLDAP操作以外に、接続の管理が必要になることがあります。 接続を管理する場合は接続要求コントロールを使用しますが、通常のLDAP操作の場合はコンテキスト要求コントロールを使用します。

明示的に指定されていない場合、要求コントロールという用語はコンテキスト要求コントロールのことです。

コンテキスト要求コントロール

コンテキスト・インスタンスが要求コントロールを取得する方法は2つあります。
  1. ldapContext.newInstance(reqCtls)
  2. ldapContext.setRequestControls(reqCtls)
ここで、ldapContextLdapContextのインスタンスです。 reqCtlsnullまたは空の配列を指定すると、リクエスト制御は行われません。newInstance()は、reqCtlsを使用してコンテキストの新規インスタンスを作成しますが、setRequestControls()は、既存のコンテキスト・インスタンスのリクエスト制御をreqCtlsに更新します。

環境プロパティとは異なり、コンテキスト・インスタンスの要求コントロールは、そのインスタンスから派生したコンテキスト・インスタンスによって継承されません 導出されたコンテキスト・インスタンスには、コンテキスト・リクエスト制御としてnullがあります。 setRequestControls()を使用して、導出コンテキスト・インスタンスのリクエスト制御を明示的に設定する必要があります。

コンテキスト・インスタンスのリクエスト制御は、メソッドgetRequestControls()を使用して取得されます。

接続要求コントロール

接続要求コントロールを設定する3つの方法があります。
  1. new InitialLdapContext(env, connCtls)
  2. refException.getReferralContext(env, connCtls)
  3. ldapContext.reconnect(connCtls);
refExceptionLdapReferralExceptionのインスタンスで、ldapContextLdapContextのインスタンスです。 nullまたはconnCtlsに空の配列を指定すると、接続リクエスト制御が行われません。

環境プロパティと同様に、コンテキストの接続要求コントロールは、そのコンテキストから派生したコンテキストによって継承されます 通常は、InitialLdapContextコンストラクタまたはLdapReferralContext.getReferralContext()を使用して、接続リクエスト制御を初期化します。 これらの接続要求コントロールは、同じ接続を共有しているコンテキストつまり、初期コンテキストまたは参照コンテキストから派生したコンテキストによって継承されます。

reconnect()を使用して、コンテキストの接続リクエスト制御を変更します。 ldapContext.reconnect()の起動は、ldapContextによって使用される接続と、ldapContextから導出された新しいコンテキスト・インスタンスにのみ影響します。 以前にldapContextで接続を共有していたコンテキストは変更されません。 つまり、コンテキストの接続要求コントロールは明示的に変更される必要があり、別のコンテキストの接続要求コントロールが変更されても影響を受けません。

コンテキスト・インスタンスの接続リクエスト制御は、メソッドgetConnectControls()を使用して取得されます。

サービス・プロバイダの要求

サービス・プロバイダは、接続およびコンテキストの要求コントロールを次のようにサポートします。 コンテキスト要求コントロールはコンテキスト・インスタンスごとに関連付け、接続要求コントロールは接続インスタンスごとに関連付ける必要があります。 サービス・プロバイダは、環境プロパティ「java.naming.ldap.control.connect」内で接続要求コントロールを検索し、この環境プロパティをプロバイダが作成するコンテキスト・インスタンスに引き渡さなければいけません。

応答コントロール

メソッドLdapContext.getResponseControls()は、Context/DirContext操作の呼出しの結果として実行されたLDAP操作によって生成されたレスポンス制御を取得するために使用されます。 この結果は、暗黙的な再接続を含むLDAP操作のもとで生成されたすべての応答コントロールです。 再接続レスポンス制御のみを取得するには、reconnect()に続けてgetResponseControls()を指定します。

Parameters

任意のメソッドにパラメータとして渡されたControl[]配列は、コール元が所有します。 サービス・プロバイダは、配列を変更したり、配列への参照を保持したりしませんが、配列内の個々のControlオブジェクトへの参照を保持する場合があります。 どのメソッドからも返されたControl[]配列は不変であり、その後、コール元またはサービス・プロバイダによって変更されることはありません。
導入されたバージョン:
1.3
関連項目: