public interface DirStateFactory
此接口表示一个工厂,该工厂用来获得对象的状态和用于绑定的相应属性。
JNDI 框架允许通过对象工厂动态加载对象实现。
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() 方法,其中一个方法在属性参数上不同于另一个方法。DirectoryManager.getStateToBind() 将只使用接受属性参数的形式,而 NamingManager.getStateToBind() 将只使用不接受属性参数的形式。
可以使用不同的参数多次调用 DirStateFactory 任何一种形式的 getStateToBind() 方法。该实现是线程安全的。
DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable
, javax.naming.directory.Attributes)
,
DirObjectFactory
嵌套类摘要 | |
---|---|
static class |
DirStateFactory.Result 用于返回 DirStateFactory.getStateToBind() 的结果的对象/属性对。 |
方法摘要 | |
---|---|
DirStateFactory.Result |
getStateToBind(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment, Attributes inAttrs) 在给定要传输的对象和属性的情况下检索用于绑定的对象的状态。 |
从接口 javax.naming.spi.StateFactory 继承的方法 |
---|
getStateToBind |
方法详细信息 |
---|
DirStateFactory.Result getStateToBind(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment, Attributes inAttrs) throws NamingException
DirectoryManager.getStateToBind() 接连在状态工厂中加载。如果某一工厂实现 DirStateFactory,则 DirectoryManager 将调用此方法;否则,它将调用 StateFactory.getStateToBind()。它将持续这样做,直到某一工厂产生非 null 响应。
当某一工厂抛出异常时,该异常被传递给 DirectoryManager.getStateToBind() 的调用者。停止搜索可能产生非 null 应答的其他工厂。工厂只有在可以确定它是唯一需要的工厂并且不应该再尝试其他工厂时才抛出异常。如果此对象工厂无法使用所提供的参数创建对象,则它应该返回 null。
可以有选择地使用 name
和 nameCtx
参数来指定要创建的对象的名称。有关详细信息,请参阅 ObjectFactory.getObjectInstance()
中“名称和上下文参数”的描述。如果某一工厂使用 nameCtx
,则它应该将其使用与并发访问同步,因为无法保证上下文实现是线程安全的。
name、inAttrs 和 environment 参数都归调用者所有。该实现不会修改这些对象或保存对它们的引用,尽管它可能保存对这些对象的副本的引用。此方法返回的对象归调用者所有。该实现随后不会对它进行修改。它或者包含一个同样归调用者所有的新 Attributes 对象,或者包含对原始 inAttrs 参数的引用。
obj
- 将检索其状态的对象(可能为 null)。
name
- 此对象相对于
nameCtx
的名称,如果没有指定名称,则该参数为 null。
nameCtx
- 一个上下文,
name
参数是相对于该上下文指定的,如果
name
相对于默认初始上下文,则该参数为 null。
environment
- 将在创建对象的状态时使用的环境(可能为 null)。
inAttrs
- 将与对象绑定在一起的属性(可能为 null)。该工厂不得修改
inAttrs。
NamingException
- 如果此工厂在试图获得对象的状态时遇到异常,并且不再尝试其他工厂。
DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable
, javax.naming.directory.Attributes)