| インタフェース | 説明 |
|---|---|
| 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 |
この abstract クラスは、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 で定義された、StartTLS の LDAPv3 拡張要求を実装します。
StartTLS のオブジェクト識別子は 1.3.6.1.4.1.1466.20037 です。拡張要求の値は定義されていません。
|
| StartTlsResponse |
このクラスは、Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security で定義された、StartTLS の LDAPv3 拡張応答を実装します。
StartTLS のオブジェクト識別子は 1.3.6.1.4.1.1466.20037 です。拡張応答の値は定義されていません。
|
| UnsolicitedNotificationEvent |
このクラスは、LDAP サーバーから送信された非要請通知に応じてトリガーされたイベントを表します。
|
| 例外 | 説明 |
|---|---|
| LdapReferralException |
この abstract クラスは、LDAP 参照例外を表すために使用されます。
|
このパッケージは、Java Naming and Directory InterfaceTM (JNDI) のディレクトリ操作を拡張します。 JNDI は、Java プログラミング言語で記述されたアプリケーションにネーミングおよびディレクトリ機能を提供します。ほかのネームおよびディレクトリサービスの実装と独立して動作するように設計されています。新しいサービス、展開されつつあるサービス、すでに展開されているサービスなど、さまざまなサービスに対して共通の方法でアクセスすることができます。
このパッケージは、RFC 2251 で定義された LDAPv3 の拡張操作とコントロールを処理するアプリケーションおよびサービスプロバイダ向けのものです。このパッケージのコアインタフェースは LdapContext で、これは拡張操作実行およびコントロール処理のコンテキストのメソッドを定義します。
このパッケージは、拡張操作の引数を表す ExtendedRequest インタフェースおよび拡張操作の結果を表す ExtendedResponse インタフェースを定義します。拡張応答は常に拡張要求とペアになりますが、拡張要求は必ずしも拡張応答とペアになる必要はありません。つまり、対応する拡張応答のない拡張要求を持てるということです。
アプリケーションは通常、これらのインタフェースを直接は処理しません。代わりに、これらのインタフェースを実装しているクラスが処理されます。これらのクラスは、IETF によって標準化された拡張操作のレパートリの一部として取得しますが、ベンダー固有の拡張操作の場合はディレクトリベンダーから取得します。要求クラスには、型保証された簡単な方法で引数を受け取るコンストラクタが必要です。また、応答クラスには、同様の方法で応答のデータを取得するアクセスメソッドが必要です。要求および応答クラスでは、BER 値のエンコードおよびデコードが行われます。
たとえば、LDAP サーバーが「時間取得」の拡張操作をサポートしているとします。LDAP サーバーはアプリケーションでこの機能が使用できるように、GetTimeRequest や GetTimeResponse などのクラスを提供します。アプリケーションはこれらのクラスを次のように使います。
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;
}
}
アプリケーションは通常、このインタフェースを直接は処理しません。代わりに、このインタフェースを実装しているクラスを処理します。アプリケーションはコントロールクラスを、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
}
}
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.