JavaTM Platform
Standard Ed. 6

パッケージ javax.naming.ldap

LDAPv3 の拡張操作とコントロールをサポートします。

参照先:
          説明

インタフェースの概要
Control このインタフェースは、「RFC 2251」で定義されているように LDAPv3 コントロールを表示します。
ExtendedRequest このインタフェースは、「RFC 2251」で定義されている LDAPv3 拡張操作の要求を表します。
ExtendedResponse このインタフェースは、「RFC 2251」で定義されている LDAP 拡張操作の応答を表します。
HasControls このインタフェースは、オブジェクトが NamingEnumerations で返されるとき、コントロールを返すのに使用されます。
LdapContext このインタフェースは、LDAPv3 スタイルのコントロールを持つ操作と LDAPv3 スタイルの拡張操作を実行できるコンテキストを表します。
UnsolicitedNotification このインタフェースは、「RFC 2251」で定義された非要請通知を表します。
UnsolicitedNotificationListener このインタフェースは、UnsolicitedNotificationEvent を処理するためのものです。
 

クラスの概要
BasicControl このクラスは、Control インタフェースの基本的な実装を提供します。
ControlFactory この抽象クラスは、LDAPv3 コントロールの作成に使用するファクトリを表示します。
InitialLdapContext このクラスは、LDAPv3 スタイルの拡張操作および拡張コントロールを実行するための開始コンテキストです。
LdapName このクラスは、RFC 2253 に指定されている識別名を表します。
ManageReferralControl 参照オブジェクトおよびその他の特殊な LDAP オブジェクトを、通常の LDAP オブジェクトとして操作するように要求します。
PagedResultsControl 検索操作の結果を、指定したサイズごとにまとめて返すよう LDAP サーバーに要求します。
PagedResultsResponseControl 1 セットの検索結果が終了したことを示します。
Rdn このクラスは、相対識別名、または識別名のコンポーネントである RDN (RFC 2253 を参照) を表します。
SortControl 検索操作の結果をソートしてから返すように LDAP サーバーに要求します。
SortKey ソートキーと関連ソートパラメータです。
SortResponseControl 検索結果が要求どおりにソートされたかどうかを示します。
StartTlsRequest このクラスは、Lightweight Directory Access Protocol (v3):Extension for Transport Layer Security に定義されている、LDAPv3 の StartTLS 拡張要求を実装します。
StartTlsResponse このクラスは、Lightweight Directory Access Protocol (v3):Extension for Transport Layer Security に定義されている、LDAPv3 の StartTLS 拡張要求を実装します。
UnsolicitedNotificationEvent このクラスは、LDAP サーバーから送信された非要請通知に応じてトリガーされたイベントを表します。
 

例外の概要
LdapReferralException この抽象クラスは、LDAP 参照例外を表すために使用されます。
 

パッケージ javax.naming.ldap の説明

LDAPv3 の拡張操作とコントロールをサポートします。

このパッケージは、Java Naming and Directory InterfaceTM (JNDI) のディレクトリ操作を拡張します。JNDI  は、Java プログラミング言語で作成されたアプリケーションにネーミング機能およびディレクトリ機能を提供します。JNDI は、特定のネーミングまたはディレクトリサービス実装とは独立して設計されています。このため、新しいサービスおよびすでに配置されている様々なサービスに、共通の方法でアクセスできます。

このパッケージは、「RFC 2251」で定義された LDAPv3 の拡張操作とコントロールを処理するアプリケーションおよびサービスプロバイダ向けのものです。このパッケージのコアインタフェースは LdapContext で、これは拡張操作実行およびコントロール処理のコンテキストのメソッドを定義します。

拡張操作

このパッケージは、拡張操作の引数を表す ExtendedRequest インタフェースおよび拡張操作の結果を表す ExtendedResponse インタフェースを定義します。拡張応答は常に拡張要求とペアになりますが、拡張要求は必ずしも拡張応答とペアになる必要はありません。つまり、対応する拡張応答のない拡張要求を持てるということです。

アプリケーションは通常、これらのインタフェースを直接は処理しません。代わりに、これらのインタフェースを実装しているクラスを処理します。アプリケーションはこれらのクラスを、 IETF によって標準化された拡張操作として取得するか、あるいはベンダー固有の拡張操作のディレクトリベンダーから取得します。要求クラスには、型保証されたユーザーが使いやすい方法で引数を受け入れるコンストラクタが必要で、応答クラスには、型保証されたユーザーが使いやすい方法で応答のデータを取得するためのアクセスメソッドが必要です。内部的には、要求クラスおよび応答クラスは BER 値の符号化および復号化を処理します。

たとえば、LDAP サーバーが「時間取得」の拡張操作をサポートしている場合、LDAP サーバーは、アプリケーションがこの機能を使えるよう、GetTimeRequestGetTimeResponse などのクラスを指定します。アプリケーションはこれらのクラスを次のように使います。

GetTimeResponse resp =
(GetTimeResponse) ectx.extendedOperation(new GetTimeRequest()); long time = resp.getTime();

GetTimeRequest および GetTimeResponse クラスは次のように定義できます。

public class GetTimeRequest implements ExtendedRequest {
// User-friendly constructor
public GetTimeRequest() {
    };

// Methods used by service providers
public String getID() {
return GETTIME_REQ_OID;
    }
public byte[] getEncodedValue() {
return null;  // no value needed for get time request
    }
public ExtendedResponse createExtendedResponse(
String id, byte[] berValue, int offset, int length) throws NamingException {
return new GetTimeResponse(id, berValue, offset, length);
    }
}
public class GetTimeResponse() implements ExtendedResponse {
long time;
// called by GetTimeRequest.createExtendedResponse()
public GetTimeResponse(String id, byte[] berValue, int offset, int length)
throws NamingException {
// check validity of id
long time =  ...// decode berValue to get time
    }

// Type-safe and User-friendly methods
public java.util.Date getDate() { return new java.util.Date(time); }
public long getTime() { return time; }

// Low level methods
public byte[] getEncodedValue() {
return // berValue saved;
    }
public String getID() {
return GETTIME_RESP_OID;
    }
}

コントロール

このパッケージは、LDAPv3 コントロールを表す Control インタフェースを定義します。このインタフェースは、LDAP サーバーに送信されるコントロール (要求コントロール) となるか、あるいは LDAP サーバーによって返されるコントロール (応答コントロール) となります。拡張要求や拡張応答と異なり、必ずしも要求コントロールと応答コントロールの間でペアを組む必要はありません。要求コントロールを送信して応答コントロールが戻らないようにしたり、あるいは要求コントロールを送信しないで応答コントロールを受信したりできます。

アプリケーションは通常、このインタフェースを直接は処理しません。代わりに、このインタフェースを実装しているクラスを処理します。アプリケーションはコントロールクラスを、IETF によって標準化されたコントロールのレパートリの一部として取得するか、あるいはベンダー固有のコントロールのディレクトリベンダーから取得します。要求コントロールクラスには、型保証されたユーザーが使いやすい方法で引数を受け入れるコンストラクタが必要で、応答コントロールクラスには、型保証されたユーザーが使いやすい方法で応答のデータを取得するためのアクセスメソッドが必要です。内部的には、要求コントロールクラスおよび応答コントロールクラスは BER 値の符号化および復号化を処理します。

たとえば、LDAP サーバーが「署名付き結果」の要求コントロールをサポートしているとします。 このコントロールは、要求とともに送信されたとき、サーバーに、電子署名付きで操作結果を返すように要求します。LDAP サーバーは、アプリケーションがこの機能を使えるよう、SignedResultsControl クラスを指定します。アプリケーションはこのクラスを次のように使います。

Control[] reqCtls = new Control[] {new SignedResultsControl(Control.CRITICAL)};
ectx.setRequestControls(reqCtls);
NamingEnumeration enum = ectx.search(...);
SignedResultsControl クラスは次のように定義できます。
public class SignedResultsControl implements Control {
// User-friendly constructor
public SignedResultsControl(boolean criticality) {
        // assemble the components of the request control
    };

// Methods used by service providers
public String getID() {
return // control's object identifier
    }
public byte[] getEncodedValue() {
return // ASN.1 BER encoded control value
    }
    ...
}

サービスプロバイダが応答コントロールを受信すると、このプロバイダは ControlFactory クラスを使って、Control インタフェースを実装する特定のクラスを生成します。

LDAP サーバーは、LDAP 操作とともに応答コントロールを返信でき、またリストや検索操作などによって返された列挙結果とともに返信できます。LdapContext は、LDAP 操作とともに送信された応答コントロールを取得するメソッド (getResponseControls()) を提供し、HasControls は、列挙結果に関連した応答コントロールを取得するのに使用されます。

たとえば、変更完了にともない LDAP サーバーが「ID 変更」コントロールを返信する場合、サーバーは、アプリケーションがこの機能を使えるように ChangeIDControl クラスを指定します。アプリケーションは更新を行い、続いて ID 変更を取得しようとします。

// Perform update
Context ctx = ectx.createSubsubcontext("cn=newobj");

// Get response controls
Control[] respCtls = ectx.getResponseControls();
if (respCtls != null) {
// Find the one we want
for (int i = 0; i < respCtls; i++) {
if(respCtls[i] instanceof ChangeIDControl) {
            ChangeIDControl cctl = (ChangeIDControl)respCtls[i];
            System.out.println(cctl.getChangeID());
        }
    }
}
ベンダーは次のような ChangeIDControl クラスおよび VendorXControlFactory クラスを指定します。サービスプロバイダは、LDAP サーバーから応答コントロールを受信したとき、VendorXControlFactory を使用します。
public class ChangeIDControl implements Control {
long id;

// Constructor used by ControlFactory
public ChangeIDControl(String OID, byte[] berVal) throws NamingException {
// check validity of OID
id = // extract change ID from berVal
    };

// Type-safe and User-friendly method
public long getChangeID() {
return id;
    }

// Low-level methods
public String getID() {
return CHANGEID_OID;
    }
public byte[] getEncodedValue() {
return // original berVal
    }
    ...
}
public class VendorXControlFactory extends ControlFactory {
public VendorXControlFactory () {
    }

public Control getControlInstance(Control orig) throws NamingException {
if (isOneOfMyControls(orig.getID())) {
            ... 

            // determine which of ours it is and call its constructor
            return (new ChangeIDControl(orig.getID(), orig.getEncodedValue()));
        }
return null;  // not one of ours
    }
}

パッケージの仕様

JNDI API 仕様と関連ドキュメントについては、「JNDI のドキュメント」を参照してください。

導入されたバージョン:
1.3

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。