Module java.naming
Package javax.naming.spi

Interface DirStateFactory

所有超接口:
StateFactory

public interface DirStateFactory extends StateFactory
该接口表示用于获取对象状态和相应绑定属性的工厂。

JNDI框架允许通过对象工厂动态加载对象实现。

DirStateFactory通过允许向getStateToBind()方法提供并返回Attributes实例来扩展StateFactoryDirStateFactory实现旨在供DirContext服务提供者使用。当调用者使用DirContext.bind()绑定对象时,他可能还指定一组要与对象一起绑定的属性。要绑定的对象和属性传递给工厂的getStateToBind()方法。如果工厂处理对象和属性,则返回相应的对象和要绑定的属性对。如果工厂不处理对象,则必须返回null。

例如,调用者可能使用一些与打印机相关的属性绑定打印机对象。

 ctx.rebind("inky", printer, printerAttrs);
ctx的LDAP服务提供者使用DirStateFactory(间接通过DirectoryManager.getStateToBind())并给出printerprinterAttrs。 LDAP目录的工厂可能将printer转换为一组属性并将其与printerAttrs合并。 然后,服务提供者使用生成的属性创建LDAP条目并更新目录。

由于DirStateFactory扩展了StateFactory,它具有两个getStateToBind()方法,其中一个与另一个不同的地方在于属性参数。 DirectoryManager.getStateToBind()将仅使用接受属性参数的形式,而NamingManager.getStateToBind()将仅使用不接受属性参数的形式。

DirStateFactory的getStateToBind()方法的任一形式可能被多次调用,可能使用不同的参数。 实现是线程安全的。

自版本:
1.3
参见:
  • Method Details

    • getStateToBind

      DirStateFactory.Result getStateToBind(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment, Attributes inAttrs) throws NamingException
      给定要转换的对象和属性,检索对象的绑定状态。

      DirectoryManager.getStateToBind()连续加载状态工厂。 如果工厂实现了DirStateFactoryDirectoryManager将调用此方法;否则,它将调用StateFactory.getStateToBind()。 它会一直这样做,直到工厂产生非null答案。

      当工厂抛出异常时,异常将传递给DirectoryManager.getStateToBind()的调用者。 停止搜索其他可能产生非null答案的工厂。 如果工厂确定它是唯一预期的工厂,并且不应尝试其他工厂,则应仅抛出异常。 如果此工厂无法使用提供的参数创建对象,则应返回null。

      namenameCtx参数可以选择用于指定正在创建的对象的名称。 有关详细信息,请参阅ObjectFactory.getObjectInstance()中的“名称和上下文参数”描述。 如果工厂使用nameCtx,则应根据并发访问同步其使用,因为上下文实现不能保证是线程安全的。

      nameinAttrsenvironment参数由调用者拥有。 实现不会修改这些对象或保留对它们的引用,尽管它可能保留对克隆或副本的引用。 此方法返回的对象由调用者拥有。 实现不会随后修改它。 它将包含一个新的同样由调用者拥有的Attributes对象,或者对原始inAttrs参数的引用。

      参数:
      obj - 可能为null的对象,其状态将被检索。
      name - 相对于nameCtx的此对象的名称,如果未指定名称,则为null。
      nameCtx - 指定name参数的上下文,如果name相对于默认初始上下文,则为null。
      environment - 用于创建对象状态的可能为null的环境。
      inAttrs - 要与对象绑定的可能为null的属性。 工厂不得修改inAttrs
      返回:
      包含要绑定的对象的状态和相应要绑定的属性的Result;如果对象不使用此工厂,则为null。
      抛出:
      NamingException - 如果此工厂在尝试获取对象状态时遇到异常,并且不应尝试其他工厂。
      参见: