JavaTM 2 Platform
Std. Ed. v1.3

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 の可能性がある、オブジェクトの生成に使用される環境
attrs - null の可能性がある、obj の属性をいくらか含む属性。attrs は必ずしも obj の属性をすべて持つ必要はない。オブジェクトファクトリがさらに属性を必要とする場合、ファクトリは obj か、あるいは namenameCtx を使って属性を取得する必要がある。ファクトリは attrs を変更できない
戻り値:
生成されたオブジェクト。オブジェクトを生成できない場合は 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.3

バグや機能要求の報告
さらに詳しい API リファレンスおよび開発者ドキュメントについては、 Java 2 SDK SE Developer Documentation を参照してください。このドキュメントには、概念、用語の定義、回避策、 実用的なコード例など、開発者を対象にした詳細な解説が掲載されています。

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