public interface StateFactory
JNDIフレームワークでは、オブジェクト・ファクトリを使用してオブジェクト実装を動的にロードできます。たとえば名前空間にバインドされたプリンタを検索する場合、印刷サービスがプリンタ名をReferenceにバインドすると、プリンタReferenceを使ってプリンタ・オブジェクトを生成して、ルックアップの呼出し側がルックアップ後に直接プリンタ・オブジェクトで操作できるようになります。
ObjectFactoryは、特定の型のオブジェクトの作成を担当します。上記の例では、Printerオブジェクトの生成にPrinterObjectFactoryを使うことができます。
逆のプロセスでは、オブジェクトが名前空間にバインドされている場合、JNDIは状態ファクトリを提供します。ここでもプリンタを例にとって、プリンタ・オブジェクトが更新され、再度バインドされる場合を考えます。
ctxのサービス・プロバイダは、状態ファクトリを使ってprinterの名前空間へのバインディングの状態を取得します。Printerタイプ・オブジェクトの状態ファクトリは、ネーミング・システムでの記憶のために、よりコンパクトなオブジェクトを返すことがあります。ctx.rebind("inky", printer);
状態ファクトリはStateFactoryインタフェースを実装する必要があります。またファクトリ・クラスはpublicであることが必要で、かつパラメータを取れないpublicコンストラクタを持つ必要があります。
状態ファクトリのgetStateToBind()メソッドは、異なるパラメータを使って複数回呼び出されることがあります。実装はスレッド・セーフです。
StateFactoryはContextインタフェースだけを実装しているサービス・プロバイダ対象です。DirStateFactoryはDirContextインタフェースを実装しているサービス・プロバイダ対象です。
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
修飾子と型 | メソッドと説明 |
---|---|
Object |
getStateToBind(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment)
オブジェクトのバインディングの状態を取得します。
|
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の可能性がある環境。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)
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.