- 既知のすべてのサブインタフェース:
DirStateFactory
public interface StateFactory
JNDIフレームワークでは、オブジェクト・ファクトリを使用してオブジェクト実装を動的にロードできます。 たとえば名前空間にバインドされたプリンタを検索する場合、印刷サービスがプリンタ名をReferenceにバインドすると、プリンタReferenceを使ってプリンタ・オブジェクトを生成して、ルックアップの呼出し側がルックアップ後に直接プリンタ・オブジェクトで操作できるようになります。
ObjectFactoryは、特定の型のオブジェクトの作成を担当します。 上記の例では、Printerオブジェクトの生成にPrinterObjectFactoryを使うことができます。
逆のプロセスでは、オブジェクトが名前空間にバインドされている場合、JNDIは状態ファクトリを提供します。 ここでもプリンタを例にとって、プリンタ・オブジェクトが更新され、再度バインドされる場合を考えます。
ctx.rebind("inky", printer);
ctxのサービス・プロバイダは、状態ファクトリを使ってprinterの名前空間へのバインディングの状態を取得します。 Printerタイプ・オブジェクトの状態ファクトリは、ネーミング・システムでの記憶のために、よりコンパクトなオブジェクトを返すことがあります。
状態ファクトリはStateFactoryインタフェースを実装する必要があります。 またファクトリ・クラスはpublicであることが必要で、かつパラメータを取れないpublicコンストラクタを持つ必要があります。 ファクトリが名前付きモジュールにある場合は、そのモジュールがjava.namingモジュールにエクスポートするパッケージ内にある必要があります。
状態ファクトリのgetStateToBind()メソッドは、異なるパラメータを使って複数回呼び出されることがあります。 実装はスレッド・セーフです。
StateFactoryはContextインタフェースだけを実装しているサービス・プロバイダ対象です。 DirStateFactoryはDirContextインタフェースを実装しているサービス・プロバイダ対象です。
- 導入されたバージョン:
- 1.3
- 関連項目:
NamingManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>),DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>, javax.naming.directory.Attributes),ObjectFactory,DirStateFactory
-
メソッドの詳細
-
getStateToBind
Object getStateToBind(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment) throws NamingExceptionオブジェクトのバインディングの状態を取得します。NamingManager.getStateToBind()は状態ファクトリに連続的にロードし、1つがnull以外の答えを生成するまで状態ファクトリ上でこのメソッドを呼び出し続けます。DirectoryManager.getStateToBind()は、状態ファクトリに連続的にロードします。 ファクトリがDirStateFactoryを実装していれば、DirectoryManagerがDirStateFactory.getStateToBind()を呼び出します。そうでない場合はStateFactory.getStateToBind()を呼び出します。ファクトリが例外をスローすると、その例外は
NamingManager.getStateToBind()およびDirectoryManager.getStateToBind()の呼出し側に渡されます。 null以外の答えを生成する可能性のあるほかのファクトリの検索は停止します。 ファクトリは、それが目的の唯一のファクトリであり、ほかのファクトリを検索する必要がないことが確実な場合にのみ、例外をスローするようにします。 このファクトリが指定された引数でオブジェクトを生成できない場合は、nullを返します。作成されるオブジェクトの名前を指定するために、必要に応じて
nameパラメータやnameCtxパラメータを使用できます。 詳細は、ObjectFactory.getObjectInstance()にある「名前パラメータとコンテキスト・パラメータ」の説明を参照してください。 コンテキスト実装はスレッド・セーフであることが保証されないため、nameCtxを使用する場合、ファクトリはその使用を並行アクセスに対して同期化するようにします。nameパラメータとenvironmentパラメータは、呼出し元によって所有されます。 実装はこれらのオブジェクトを変更せず、そのオブジェクトに対する参照も保持しませんが、複製またはコピーに対する参照を保持することがあります。- パラメータ:
obj- 状態を取得するnull以外のオブジェクト。name-nameCtxを基準にしたこのオブジェクトの名前、または名前が指定されていない場合はnull。nameCtx-nameパラメータが基準にして指定されているコンテキスト、またはnameがデフォルトの初期コンテキストを基準にしている場合はnull。environment- オブジェクトの状態の作成で使用されるnullの可能性がある環境。- 戻り値:
- オブジェクトのバインディングの状態。ファクトリが何も変更を返さない場合はnull。
- 例外:
NamingException- オブジェクトの状態を取得しようとしているときにこのファクトリが例外を検出し、ほかのファクトリが試行されない場合。- 関連項目:
NamingManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>),DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>, javax.naming.directory.Attributes)
-