public interface ObjectFactory
JNDIフレームワークでは、オブジェクト・ファクトリを使用してオブジェクト実装を動的にロードできます。たとえば名前空間にバインドされたプリンタを検索する場合、印刷サービスがプリンタ名をReferenceにバインドすると、プリンタReferenceを使ってプリンタ・オブジェクトを生成して、ルックアップの呼出し側がルックアップ後に直接プリンタ・オブジェクトで操作できるようになります。
ObjectFactoryは、特定の型のオブジェクトの作成を担当します。上記の例では、Printerオブジェクトの生成にPrinterObjectFactoryを使うことができます。
オブジェクト・ファクトリはObjectFactoryインタフェースを実装する必要があります。またファクトリ・クラスはpublicであることが必要で、かつパラメータを取れないpublicコンストラクタを持つ必要があります。
オブジェクト・ファクトリのgetObjectInstance()メソッドは、異なるパラメータを使って複数回呼び出されることがあります。実装はスレッド・セーフです。
このクラスのドキュメントのURLの記載は、RFC 1738およびその関連RFCで定義されているURL文字列を指しています。それは、そこで記述されている構文規則に準拠する任意の文字列であり、対応するサポートがjava.net.URLクラスまたはWebブラウザに必ずあるとは限りません。
修飾子と型 | メソッドと説明 |
---|---|
Object |
getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment)
指定された位置情報または参照情報を使って、オブジェクトを生成します。
|
Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment) throws Exception
このオブジェクトの特殊要件は、environment
を使用して指定されます。こうした環境プロパティの一例としては、ユーザー識別情報があります。
NamingManager.getObjectInstance()は、オブジェクト・ファクトリに連続的にロードし、1つがnull以外の答えを生成するまでオブジェクト・ファクトリ上でこのメソッドを呼出し続けます。オブジェクト・ファクトリが例外をスローすると、その例外はNamingManager.getObjectInstance()の呼出し側に引き渡され、null以外の答えを生成する可能性のあるほかのファクトリの検索は行われません。オブジェクト・ファクトリは、それが目的の唯一のファクトリであり、ほかのオブジェクト・ファクトリを検索する必要がないことが確実な場合に限り、例外をスローするようにします。このファクトリが指定された引数でオブジェクトを生成できない場合は、nullを返します。
URLコンテキスト・ファクトリは特殊なObjectFactoryで、URLまたはURLが位置を指定するオブジェクトを解決するコンテキストを生成します。URLコンテキスト・ファクトリのgetObjectInstance()メソッドは、次の規則に従います。
obj
がnullの場合、このファクトリに関連したスキームのURLを解決するコンテキストを生成します。結果のコンテキストは特定のURLに結び付いていません。このコンテキストは、このファクトリのスキームIDを使用して任意のURLを処理できます。たとえば、LDAP URLコンテキスト・ファクトリでnullに設定されたobj
を持つgetObjectInstance()を呼び出すと、ldap://ldap.wiz.com/o=wiz,c=us、ldap://ldap.umich.edu/o=umich,c=usなどのLDAP URLを解決できるコンテキストが返されます。
obj
がURL文字列である場合、URLによって識別されたオブジェクト(通常はコンテキスト)を生成します。たとえば、それがLDAP URLコンテキスト・ファクトリであるとします。obj
がldap://ldap.wiz.com/o=wiz,c=usの場合、getObjectInstance()は、LDAPサーバーldap.wiz.comの識別名「o=wiz, c=us」によって指定されたコンテキストを返します。続いてこのコンテキストを使って、そのコンテキストに関連するLDAP名(cn=Georgeなど)を解決できます。
obj
がURL文字列の配列である場合、URLは、それらが参照するコンテキストという点で同等であると仮定します。URLが等しいこと、または等しい必要があることの確認はコンテキスト・ファクトリに任されています。URLの配列内の順序は重要ではありません。getObjectInstance()が返すオブジェクトは、単一のURLの場合と同じです。これは、URLによって指定されたオブジェクトです。
obj
が上記以外の型である場合、getObjectInstance()の動作はコンテキスト・ファクトリ実装によって決定されます。
nameパラメータとenvironmentパラメータは、呼出し元によって所有されます。実装はこれらのオブジェクトを変更せず、そのオブジェクトに対する参照も保持しませんが、複製またはコピーに対する参照を保持することがあります。
名前パラメータとコンテキスト・パラメータ。 作成されるオブジェクトの名前を指定するために、オプションでname
パラメータやnameCtx
パラメータを使用できます。name
は、コンテキストnameCtx
を基準にした、オブジェクトの名前です。オブジェクトを命名できるコンテキストが複数あることもありますが、その場合は呼出し側が選択します。適切な経験則として、使用可能な「もっとも深い」コンテキストを選択することをお薦めします。nameCtx
がnullの場合、name
はデフォルトの初期コンテキストを基準にしています。名前を指定しない場合は、name
パラメータをnullにします。コンテキスト実装はスレッド・セーフであることが保証されないため、nameCtx
を使用する場合、ファクトリはその使用を並行アクセスに対して同期化するようにします。
obj
- オブジェクトの作成で使用できる位置または参照情報を含むnullの可能性があるオブジェクト。name
- nameCtx
を基準にしたこのオブジェクトの名前、または名前が指定されていない場合はnull。nameCtx
- name
パラメータが基準にして指定されているコンテキスト、またはname
がデフォルトの初期コンテキストを基準にしている場合はnull。environment
- オブジェクトの作成で使用されるnullの可能性がある環境。Exception
- オブジェクトの生成中にこのオブジェクト・ファクトリが例外を検出し、ほかのオブジェクト・ファクトリが試行されない場合。NamingManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
, NamingManager.getURLContext(java.lang.String, java.util.Hashtable<?, ?>)
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.