Module  java.naming
软件包  javax.naming.spi

Interface DirStateFactory

  • All Superinterfaces:
    StateFactory


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

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

    DirStateFactory延伸StateFactory通过使Attributes实例要被提供给和由返回getStateToBind()方法。 DirStateFactory实现旨在被用来DirContext服务提供商。 当调用者使用DirContext.bind()绑定对象时,他也可以指定要与对象绑定的一组属性。 要绑定的对象和属性将传递给工厂的getStateToBind()方法。 如果工厂处理对象和属性,则返回要绑定的对象和属性对。 如果工厂没有处理对象,它必须返回null。

    例如,调用者可能会将打印机对象与某些与打印机相关的属性进行绑定。

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

    由于DirStateFactory扩展了StateFactory ,它有两个getStateToBind()方法,其中一个不同于attribute参数。 DirectoryManager.getStateToBind()将仅使用接受attributes参数的表单,而NamingManager.getStateToBind()将只使用不接受attributes参数的表单。

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

    从以下版本开始:
    1.3
    另请参见:
    DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>, javax.naming.directory.Attributes)DirObjectFactory
    • 方法详细信息

      • getStateToBind

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

        DirectoryManager.getStateToBind()在国家工厂连续装载。 如果一个工厂实现DirStateFactoryDirectoryManager调用该方法; 否则,它调用StateFactory.getStateToBind() 这样做直到工厂产生非空答案。

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

        可以可选地使用namenameCtx参数来指定正在创建的对象的名称。 有关详细信息,请参阅ObjectFactory.getObjectInstance()中“名称和上下文参数”的说明。 如果一个工厂使用nameCtx它应该将其使用与并发访问同步,因为上下文实现不能保证是线程安全的。

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

        参数
        obj - 要检索其状态的可能为空的对象。
        name - 此对象相对于 nameCtx的名称,如果未指定名称,则为null。
        nameCtx - 指定 name参数的上下文,如果 name是相对于默认的初始上下文, name null。
        environment - 用于创建对象状态的可能的空环境。
        inAttrs - 与对象绑定的可能为空的属性。 工厂不得修改inAttrs
        结果
        A Result包含对象的绑定状态和要绑定的对应属性; 如果对象不使用此工厂,则为null。
        异常
        NamingException - 如果此工厂在尝试获取对象的状态时遇到异常,并且不会尝试其他工厂。
        另请参见:
        DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>, javax.naming.directory.Attributes)