- 已知的所有子接口:
-
DirStateFactory
JNDI框架允许通过对象工厂动态加载对象实现。例如,当查找绑定在命名空间中的打印机时,如果打印服务将打印机名称绑定到Reference
,则打印机Reference
可用于创建打印机对象,以便查找后调用者可以直接操作打印机对象。
ObjectFactory
负责创建特定类型的对象。在上面的示例中,您可能有一个用于创建Printer
对象的PrinterObjectFactory
。
对于反向过程,当对象绑定到命名空间时,JNDI提供状态工厂。继续使用打印机示例,假设打印机对象已更新并重新绑定:
ctx.rebind("inky", printer);
ctx
的服务提供者使用状态工厂获取printer
的状态以将其绑定到其命名空间。用于Printer
类型对象的状态工厂可能返回一个更紧凑的对象以存储在命名系统中。
状态工厂必须实现StateFactory
接口。此外,工厂类必须是公共的,并且必须有一个不接受参数的公共构造函数。请注意,在工厂位于命名模块中的情况下,它必须位于由该模块向java.naming
模块导出的包中。
状态工厂的getStateToBind()
方法可能会多次调用,可能使用不同的参数。实现是线程安全的。
StateFactory
旨在与仅实现Context
接口的服务提供者一起使用。DirStateFactory
旨在与实现DirContext
接口的服务提供者一起使用。
- 自:
- 1.3
- 参见:
-
Method Summary
-
Method Details
-
getStateToBind
Object getStateToBind(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws NamingException检索对象的状态以进行绑定。NamingManager.getStateToBind()
连续加载状态工厂并在它们上调用此方法,直到有一个产生非空答案。DirectoryManager.getStateToBind()
连续加载状态工厂。如果工厂实现了DirStateFactory
,则DirectoryManager
调用DirStateFactory.getStateToBind()
;否则调用StateFactory.getStateToBind()
。当工厂抛出异常时,异常将传递给
NamingManager.getStateToBind()
和DirectoryManager.getStateToBind()
的调用者。搜索其他可能产生非空答案的工厂将停止。工厂只有在确定自己是唯一预期的工厂且不应尝试其他工厂时才应抛出异常。如果此工厂无法使用提供的参数创建对象,则应返回null。name
和nameCtx
参数可选择用于指定正在创建的对象的名称。有关详细信息,请参阅ObjectFactory.getObjectInstance()
中的“名称和上下文参数”描述。如果工厂使用nameCtx
,则应根据并发访问同步其使用,因为上下文实现不能保证是线程安全的。name
和environment
参数由调用者拥有。实现不会修改这些对象或保留对它们的引用,尽管它可能保留对克隆或副本的引用。- 参数:
-
obj
- 要检索其状态的非空对象。 -
name
- 相对于nameCtx
的此对象的名称,如果未指定名称,则为null。 -
nameCtx
- 指定name
参数的上下文,如果name
相对于默认初始上下文,则为null。 -
environment
- 用于创建对象状态的可能为null的环境。 - 返回:
- 用于绑定的对象状态;如果工厂未返回任何更改,则为null。
- 抛出:
-
NamingException
- 如果此工厂在尝试获取对象状态时遇到异常,并且不应尝试其他工厂。 - 参见:
-