public interface ObjectFactory
JNDI フレームワークでは、オブジェクトファクトリを使用してオブジェクト実装を動的にロードできます。たとえば名前空間にバインドされたプリンタを検索する場合、印刷サービスがプリンタ名を Reference にバインドすると、プリンタ Reference を使ってプリンタオブジェクトを生成して、ルックアップの呼び出し側がルックアップ後に直接プリンタオブジェクトで操作できるようになります。
ObjectFactory は、特定の型のオブジェクトの作成を担当します。上記の例では、Printer オブジェクトの生成に PrinterObjectFactory を使うことができます。
オブジェクトファクトリは ObjectFactory インタフェースを実装する必要があります。またファクトリクラスは public であることが必要で、かつパラメータを取れない public コンストラクタを持つ必要があります。
オブジェクトファクトリの getObjectInstance() メソッドは、異なるパラメータを使って複数回呼び出されることがあります。実装はスレッドセーフです。
このクラスのドキュメントの URL の記載は、RFC 1738 およびその関連 RFC で定義されている URL 文字列を適用しています。URL 文字列は RFC の構文規則に準拠する任意の文字列です。対応するサポートが java.net.URL クラスまたは Web ブラウザに必ずあるとは限りません。
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, 2013, Oracle and/or its affiliates. All rights reserved.