-
- All Known Subinterfaces:
-
DirStateFactory
public interface StateFactory
该接口表示用于获取绑定对象的状态的工厂。JNDI框架允许通过对象工厂动态加载对象实现。 例如,当查找名称空间中绑定的打印机时,如果打印服务将打印机名称绑定到
Reference
s,打印机Reference
可用于创建打印机对象,以便查找的调用者可以直接在打印机对象上操作查找后。一个
ObjectFactory
负责创建一个特定类型的对象。 在上面的例子中,您可能有一个PrinterObjectFactory
用于创建Printer
对象。对于相反的过程,当对象绑定到命名空间中时,JNDI提供状态工厂 。 继续打印机示例,假设打印机对象已更新并反弹:
ctx.rebind("inky", printer);
ctx
的服务提供商使用状态工厂来获取printer
绑定到其命名空间中的状态。Printer
类型对象的状态工厂可能会返回一个更紧凑的对象以存储在命名系统中。国家工厂必须实施
StateFactory
接口。 此外,工厂类必须是公共的,并且必须有一个不接受参数的公共构造函数。 请注意,如果工厂位于命名模块中,则该模块必须位于由该模块导出到java.naming
模块的java.naming
。状态工厂的
getStateToBind()
方法可以被多次调用,可能使用不同的参数。 实现是线程安全的。StateFactory
旨在与仅实现Context
接口的服务提供商一起使用。DirStateFactory
旨在与实现DirContext
接口的服务提供商一起使用。- 从以下版本开始:
- 1.3
- 另请参见:
-
NamingManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
,DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>, javax.naming.directory.Attributes)
,ObjectFactory
,DirStateFactory
-
-
方法详细信息
-
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
与默认初始上下文相关,name
null。 -
environment
- 用于创建对象状态的可能的空环境。 - 结果
- 对象的绑定状态; 如果工厂没有返回任何更改,则为null。
- 异常
-
NamingException
- 如果此工厂在尝试获取对象的状态时遇到异常,并且不会尝试其他工厂。 - 另请参见:
-
NamingManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
,DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>, javax.naming.directory.Attributes)
-
-