-
- 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
模块的包中。可以使用不同的参数多次调用状态工厂的
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()
先后在州工厂DirectoryManager.getStateToBind()
。 如果工厂实施DirStateFactory
,则DirectoryManager
调用DirStateFactory.getStateToBind()
; 否则它调用StateFactory.getStateToBind()
。当工厂抛出异常时,异常将传递给调用程序
NamingManager.getStateToBind()
和DirectoryManager.getStateToBind()
。 搜索可能产生非空答案的其他工厂将停止。 工厂只有在确定它是唯一的工厂并且不应该尝试其他工厂时才应该抛出异常。 如果此工厂无法使用提供的参数创建对象,则应返回null。可以选择使用
name
和nameCtx
参数来指定要创建的对象的名称。 有关详细信息,请参阅ObjectFactory.getObjectInstance()
中“名称和上下文参数”的说明。 如果工厂使用nameCtx
它应该将其使用与并发访问同步,因为上下文实现不保证是线程安全的。name
和environment
参数归调用者所有。 实现不会修改这些对象或保留对它们的引用,尽管它可能会保留对克隆或副本的引用。- 参数
-
obj
- 要检索其状态的非null对象。 -
name
- 此对象相对于nameCtx
的名称,如果未指定名称,则为null。 -
nameCtx
- 指定name
参数的上下文,如果name
相对于默认初始上下文,name
null。 -
environment
- 在创建对象状态时可能使用的null环境。 - 结果
- 对象的绑定状态; 如果工厂未返回任何更改,则返回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)
-
-