模块  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() )并printer提供printerprinterAttrs LDAP目录的工厂可能会将printer变为一组属性,并将其与printerAttrs合并。 然后,服务提供程序使用结果属性创建LDAP条目并更新目录。

    由于DirStateFactory扩展为StateFactory ,因此它有两个getStateToBind()方法,其中一个方法与attributes参数不同。 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()先后在州工厂DirectoryManager.getStateToBind() 如果一个工厂实现DirStateFactoryDirectoryManager调用该方法; 否则,它调用StateFactory.getStateToBind() 它会在工厂生成非空答案之前执行此操作。

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

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

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

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