|
JavaTM 2 Platform Std. Ed. v1.3 |
|||||||||
| 前のパッケージ 次のパッケージ | フレームあり フレームなし | |||||||||
参照:
説明
| インタフェースの概要 | |
| 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 スタイルの拡張操作および拡張コントロールを実行するための開始コンテキストです。 |
| UnsolicitedNotificationEvent | このクラスは、LDAP サーバから送信された非要請通知に応じてトリガーされたイベントを表します |
| 例外の概要 | |
| LdapReferralException | LDAP 参照例外を示すには abstract クラスを使用します。 |
LDAPv3 の拡張操作とコントロールをサポートします。
このパッケージは、Java Naming and Directory InterfaceTM (JNDI) のディレクトリ操作を拡張します。JNDI は、Java プログラミング言語で作成されたアプリケーションにネーミング機能およびディレクトリ機能を提供します。JNDI は、特定のネーミングまたはディレクトリサービス実装とは独立して設計されています。このため、新しいサービスおよびすでに配置されている様々なサービスに、共通の方法でアクセスできます。
このパッケージは、「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()
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 サーバが「ソート」の要求コントロールをサポートしている場合、このコントロールは、検索要求とともに送信された場合、検索結果を特定の属性で順序付けて返すようサーバに要求します。このコントロールは、アプリケーションがこの機能を使えるよう、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
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」では次のドキュメントを参照できます。
|
JavaTM 2 Platform Std. Ed. v1.3 |
|||||||||
| 前のパッケージ 次のパッケージ | フレームあり フレームなし | |||||||||
Java、Java 2D、JDBC は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.