- 既知のすべてのサブインタフェース:
DirStateFactory
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)
-