JavaTM Platform
Standard Ed. 6

javax.naming.spi
接口 ObjectFactory

所有已知子接口:
DirObjectFactory

public interface ObjectFactory

此类表示用于创建对象的工厂。

JNDI 框架允许通过对象工厂 动态加载对象实现。例如,当查找绑定在名称空间中的打印机时,如果打印服务将打印机的名称绑定到 Reference,则可以使用该打印机 Reference 创建一个打印机对象,从而查找的调用者可以在查找后直接在该打印机对象上操作。

ObjectFactory 负责创建特定类型的对象。在上述示例中,可以有一个用来创建 Printer 对象的 PrinterObjectFactory。

对象工厂必须实现 ObjectFactory 接口。此外,工厂类必须是公共的,必须有一个不接受任何参数的公共构造方法。

可以使用不同的参数多次调用对象工厂的 getObjectInstance() 方法。该实现是线程安全的。

用于此类文档中的 URL 是指通过 RFC 1738 及其相关的 RFC 定义的 URL 字符串。它是符合其中所述语法的任何字符串,在 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 提供此对象的特殊需要。这种 environment 属性的一个示例是用户身份信息。

NamingManager.getObjectInstance() 接连在对象工厂中加载,并在这些工厂上调用此方法,直到某一工厂产生非 null 应答。当对象工厂抛出异常时,该异常被传递给 NamingManager.getObjectInstance() 的调用者(并且不再搜索可能产生非 null 应答的其他工厂)。对象工厂只有在可以确定它是唯一需要的工厂并且不应该再尝试其他对象工厂时才抛出异常。如果此对象工厂无法使用所提供的参数创建对象,则它应该返回 null。

URL 上下文工厂 是一个特殊的 ObjectFactory,它创建用于解析 URL 或位置由 URL 指定的对象的上下文。URL 上下文工厂的 getObjectInstance() 方法将遵守以下规则。

  1. 如果 obj 为 null,则创建一个上下文,该上下文用于解析与此工厂关联的方案的 URL。得到的上下文没有绑定到特定 URL:它能够使用此工厂的方案 id 处理任意 URL。例如,在 LDAP URL 上下文工厂上调用将 obj 设置为 null 的 getObjectInstance() 将返回一个可以解析 LDAP URL(比如 "ldap://ldap.wiz.com/o=wiz,c=us" 和 "ldap://ldap.umich.edu/o=umich,c=us")的上下文。
  2. 如果 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")。
  3. 如果 obj 是一个 URL 字符串数组,则根据它们所引用的上下文假定这些 URL 相等。验证这些 URL 是否相等或是否需要相等取决于上下文工厂。数组中 URL 的顺序无关紧要。由 getObjectInstance() 返回的对象类似于单个 URL 的情况下返回的对象。该对象是由 URL 指定的对象。
  4. 如果 obj 属于其他任何类型,则 getObjectInstance() 的行为由上下文工厂实现确定。

nameenvironment 参数都归调用者所有。该实现不会修改这些对象或保存对它们的引用,尽管它可能保存对这些对象的副本的引用。

名称和上下文参数。     可以有选择地使用 namenameCtx 参数来指定将创建的对象的名称。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 Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策