JavaTM 2
Platform
Std. Ed. v1.4.0

パッケージ 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 を処理するためのものです。
 

クラスの概要
ControlFactory この抽象クラスは、LDAPv3 コントロールの作成に使用するファクトリを表示します。
InitialLdapContext このクラスは、LDAPv3 スタイルの拡張操作および拡張コントロールを実行するための開始コンテキストです。
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 この abstract クラスは、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 サーバが「ソート」の要求コントロールをサポートしている場合、このコントロールは、検索要求とともに送信された場合、検索結果を特定の属性で順序付けて返すようサーバに要求します。このコントロールは、アプリケーションがこの機能を使えるよう、SortControl クラスを指定します。アプリケーションはこのクラスを次のように使います。

Control[] reqCtls = new Control[] {new SortControl("age")};
ectx.setRequestControls(reqCtls);
NamingEnumeration enum = ectx.search(...);
SortControl クラスは次のように定義できます。
public class SortControl implements Control {
    // User-friendly constructor 
    public SortControl(String attrID) {
        // encode attrID
    };

    // Methods used by service providers
    public String getID() {
        return SORT_OID;
    }
    public byte[] getEncodedValue() {
        return // encoded attrID
    }
    ...
}

サービスプロバイダが応答コントロールを受信すると、このプロバイダは 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 クラスを指定します。VendorXControlFactory は、サービスプロバイダが LDAP サーバから応答コントロールを受信したときにそのプロバイダが使用します。
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
    }
}

パッケージの仕様

「Java technology web site」では次のドキュメントを参照できます。

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

JavaTM 2
Platform
Std. Ed. v1.4.0

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

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.