public interface DirStateFactory extends StateFactory
JNDI框架允许通过object factories动态加载对象实现 。
A DirStateFactory扩展了StateFactory ,允许Attributes实例提供给getStateToBind()方法返回。 DirStateFactory实现旨在由DirContext服务提供商使用。 当调用者使用DirContext.bind()绑定对象时,他也可以指定要与对象绑定的一组属性。 要绑定的对象和属性被传递给工厂的getStateToBind()方法。 如果工厂处理对象和属性,则返回一对相应的对象和属性对象。 如果工厂没有处理对象,它必须返回null。
例如,调用者可能会将打印机对象与某些与打印机相关的属性进行绑定。
ctx的LDAP服务提供商使用DirStateFactory (间接通过DirectoryManager.getStateToBind() ),并给它printer和printerAttrs 。 LDAP目录的工厂可能会将printer转换为一组属性,并将其与printerAttrs进行合并。 然后,服务提供商使用生成的属性来创建LDAP条目并更新目录。ctx.rebind("inky", printer, printerAttrs);
由于DirStateFactory扩展了StateFactory ,它有两个getStateToBind()方法,其中一个不同于attribute参数。 DirectoryManager.getStateToBind()将只使用接受attributes参数的表单,而NamingManager.getStateToBind()将只使用不接受attributes参数的表单。
可以多次调用DirStateFactory的getStateToBind()方法的任一形式,可能使用不同的参数。 实现是线程安全的。
Modifier and Type | Interface and Description |
---|---|
static class |
DirStateFactory.Result
用于返回DirStateFactory.getStateToBind()的结果的对象/属性对。
|
Modifier and Type | Method and Description |
---|---|
DirStateFactory.Result |
getStateToBind(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment, Attributes inAttrs)
在给定要转换的对象和属性的情况下,检索绑定对象的状态。
|
getStateToBind
DirStateFactory.Result getStateToBind(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment, Attributes inAttrs) throws NamingException
DirectoryManager.getStateToBind()在国家工厂连续装载。 如果工厂实行DirStateFactory , 则调用此方法; DirectoryManager 否则,它调用StateFactory.getStateToBind() 。 这样做直到工厂产生非空答案。
当工厂抛出异常时,异常传递给DirectoryManager.getStateToBind()的调用者。 搜索可能产生非空答案的其他工厂停止。 如果确定它是唯一的预定工厂,并且没有其他工厂应该被尝试,工厂只应该抛出异常。 如果此工厂无法使用提供的参数创建对象,则应返回null。
可以可选地使用name
和nameCtx
参数来指定正在创建的对象的名称。 见“名称和上下文参数”的描述ObjectFactory.getObjectInstance()
了解详情。 如果工厂使用nameCtx
它应该将其使用与并发访问同步,因为上下文实现不能保证是线程安全的。
该name,inAttrs和environment参数由调用者所有。 尽管它可能会保留对克隆或副本的引用,但实现不会修改这些对象或保留对它们的引用。 该方法返回的对象由调用者拥有。 实施不会随后修改。 它将包含同样由调用者拥有的新的Attributes对象或对原始inAttrs参数的引用。
obj
- 要检索其状态的可能为空的对象。
name
- 相对于
nameCtx
的此对象的名称,如果未指定名称,则为null。
nameCtx
- 指定
name
参数的上下文,如果
name
相对于默认初始上下文,则为null。
environment
- 用于创建对象状态的可能的空环境。
inAttrs
- 要与对象绑定的可能的空属性。
工厂不得修改inAttrs 。
NamingException
- 如果此工厂在尝试获取对象的状态时遇到异常,并且不会尝试其他工厂。
DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>, javax.naming.directory.Attributes)