JavaTM 2
Platform
Std. Ed. v1.4.0

javax.naming.spi
インタフェース ObjectFactory

既知のサブインタフェースの一覧:
DirObjectFactory

public interface ObjectFactory

このインタフェースは、オブジェクトを生成するファクトリを表します。

JNDI フレームワークでは、オブジェクトファクトリを使ってオブジェクト実装を動的にロードすることが可能です。たとえば名前空間にバインドされたプリンタを検索する場合、印刷サービスがプリンタ名を Reference にバインドすると、プリンタ Reference を使ってプリンタオブジェクトを生成して、ルックアップの呼び出し側がルックアップ後直接プリンタオブジェクトで操作できます。

ObjectFactory は特定のタイプのオブジェクトの生成を行います。上記の例では、Printer オブジェクトの生成に PrinterObjectFactory を使うことができます。

オブジェクトファクトリは ObjectFactory インタフェースを実装する必要があります。またファクトリクラスは public であることが必要で、かつパラメータを取れない public コンストラクタを持つ必要があります。

オブジェクトファクトリの getObjectInstance() メソッドは、異なるパラメータを使って複数回呼び出されることがあります。実装はスレッドセーフです。

このクラスのドキュメントの URL の記載は、RFC 1738 およびその関連 RFC で定義されている URL 文字列を適用しています。ドキュメントの URL は RFC 1738 などで述べられている構文に従う文字列であって、必ずしも java.net.URL クラスまたは Web ブラウザに該当するサポートがあるわけではありません。

導入されたバージョン:
1.3
関連項目:
NamingManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable), NamingManager.getURLContext(java.lang.String, java.util.Hashtable), ObjectFactoryBuilder, StateFactory

メソッドの概要
 Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable environment)
          指定された位置情報または参照情報を使って、オブジェクトを生成します。
 

メソッドの詳細

getObjectInstance

public 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() メソッドは、以下の規則にしたがいます。

  1. 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 を解決できるコンテキストが返されます。
  2. obj が URL 文字列である場合、URL によって識別されたオブジェクト (通常はコンテキスト) を生成します。たとえば、それが LDAP URL コンテキストファクトリであるとします。obj が ldap://ldap.wiz.com/o=wiz,c=us の場合、getObjectInstance() は、LDAP サーバ ldap.wiz.com の識別名によって指定されたコンテキストを返します。続いてこのコンテキストを使って、そのコンテキストに関連する LDAP 名 (cn=George など) を解決できます。
  3. obj が URL 文字列の配列である場合、URL はそれらが参照するコンテキストという点で同等であると仮定します。URL が同等であるか、あるいは同等である必要があるかという検証は、コンテキストファクトリによって異なります。配列の URL の順序は重要ではありません。getObjectInstance() が返すオブジェクトは、単一の URL の場合と同じです。これは、URL によって指定されたオブジェクトです。
  4. 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 の可能性がある、オブジェクトの生成に使用される環境
戻り値:
生成されたオブジェクト。オブジェクトを生成できない場合は null
例外:
Exception - オブジェクトの生成中にこのオブジェクトファクトリが例外を検出し、他のオブジェクトファクトリが試行されない場合
関連項目:
NamingManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable), NamingManager.getURLContext(java.lang.String, java.util.Hashtable)

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.