JavaTM 2 Platform
Standard Ed. 5.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

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
Standard Ed. 5.0

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

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。