public interface DirStateFactory extends StateFactory
JNDIフレームワークでは、オブジェクト・ファクトリを使用してオブジェクト実装を動的にロードできます。
DirStateFactoryはStateFactoryを拡張して、getStateToBind()メソッドがAttributesインスタンスを指定して返すことができるようします。DirStateFactory実装はDirContextサービス・プロバイダが使用するものです。呼出し側がDirContext.bind()を使ってオブジェクトをバインドするとき、属性のセットもそのオブジェクトにバインドされるよう指定できます。バインドされるオブジェクトと属性は、ファクトリのgetStateToBind()メソッドに渡されます。ファクトリは、オブジェクトと属性を処理する場合はバインドされるオブジェクトと属性の該当ペアを返します。オブジェクトを処理しない場合、ファクトリはnullを返す必要があります。
たとえば、呼出し側がプリンタ・オブジェクトをプリンタ関連の属性とバインドすることがあります。
ctxのLDAPサービス・プロバイダは(DirectoryManager.getStateToBind()を使って間接的に) DirStateFactoryを使用して、DirStateFactoryにprinterおよびprinterAttrsを指定します。LDAPディレクトリのファクトリはprinterを属性のセットに変え、それをprinterAttrsとマージします。続いてサービス・プロバイダがその属性を使ってLDAPエントリを生成し、ディレクトリを更新します。ctx.rebind("inky", printer, printerAttrs);
DirStateFactoryはStateFactoryを拡張するので、2つのgetStateToBind()メソッドを持ちます。この2つのメソッドは属性引数が異なります。DirectoryManager.getStateToBind()は属性引数を受け入れる形式のみを使用し、NamingManager.getStateToBind()は属性引数を受け入れない形式のみを使用します。
DirStateFactoryのgetStateToBind()メソッドのどちらかの形式が、異なるパラメータを使って複数回呼び出されることがあります。実装はスレッド・セーフです。
修飾子と型 | インタフェースと説明 |
---|---|
static class |
DirStateFactory.Result
DirStateFactory.getStateToBind()の結果を返す、オブジェクトと属性のペアです。
|
修飾子と型 | メソッドと説明 |
---|---|
DirStateFactory.Result |
getStateToBind(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment, Attributes inAttrs)
変換対象のオブジェクトおよび属性を、バインディングするためにオブジェクトの状態を取得します。
|
getStateToBind
DirStateFactory.Result getStateToBind(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment, Attributes inAttrs) throws NamingException
DirectoryManager.getStateToBind()は、状態ファクトリに連続的にロードします。ファクトリがDirStateFactoryを実装していれば、DirectoryManagerはこのメソッドを呼び出します。そうでない場合はStateFactory.getStateToBind()を呼び出します。これは、ファクトリがnull以外の答えを生成するまで行われます。
ファクトリが例外をスローすると、その例外はDirectoryManager.getStateToBind()の呼出し側に渡されます。null以外の答えを生成する可能性のあるほかのファクトリの検索は停止します。ファクトリは、それが目的の唯一のファクトリであり、ほかのファクトリを検索する必要がないことが確実な場合にのみ、例外をスローするようにします。このファクトリが指定された引数でオブジェクトを生成できない場合は、nullを返します。
作成されるオブジェクトの名前を指定するために、必要に応じてname
パラメータやnameCtx
パラメータを使用できます。詳細は、ObjectFactory.getObjectInstance()
にある「名前パラメータとコンテキスト・パラメータ」の説明を参照してください。コンテキスト実装はスレッド・セーフであることが保証されないため、nameCtx
を使用する場合、ファクトリはその使用を並行アクセスに対して同期化するようにします。
name、inAttrs、およびenvironmentの各パラメータは、呼出し側が所有します。実装はこれらのオブジェクトを変更せず、そのオブジェクトに対する参照も保持しませんが、複製またはコピーに対する参照を保持することがあります。このメソッドが返すオブジェクトは呼出し側が所有します。実装は続いてこれを変更しません。実装には、呼出し側が所有するのと同じ新しいAttributesオブジェクトか、あるいは元のinAttrsパラメータへの参照が含まれます。
obj
- 状態を取得する、nullの可能性があるオブジェクト。name
- nameCtx
を基準にしたこのオブジェクトの名前、または名前が指定されていない場合はnull。nameCtx
- name
パラメータが基準にして指定されているコンテキスト、またはname
がデフォルトの初期コンテキストを基準にしている場合はnull。environment
- オブジェクトの状態の作成で使用されるnullの可能性がある環境。inAttrs
- オブジェクトにバインドされる、nullの可能性がある属性。ファクトリはinAttrsを変更できない。NamingException
- オブジェクトの状態を取得しようとしているときにこのファクトリが例外を検出し、ほかのファクトリが試行されない場合。DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>, javax.naming.directory.Attributes)
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.