- 所有已知的子接口:
DirStateFactory
JNDI 框架允许通过 object factories 动态加载对象实现。例如,在查找名称空间绑定的打印机时,如果打印服务将打印机名称绑定到References,则可以使用打印机Reference创建一个打印机对象,这样lookup的调用者就可以直接对打印机对象进行操作查找后。
ObjectFactory 负责创建特定类型的对象。在上面的示例中,您可能有一个 PrinterObjectFactory 用于创建 Printer 对象。
对于相反的过程,当一个对象被绑定到命名空间时,JNDI 提供了state factories。继续打印机示例,假设打印机对象已更新并重新启动:
ctx.rebind("inky", printer);
ctx 的服务提供商使用状态工厂获取 printer 的状态以绑定到其命名空间。 Printer 类型对象的状态工厂可能会返回一个更紧凑的对象以存储在命名系统中。
国家工厂必须实施 StateFactory 接口。此外,工厂类必须是公共的,并且必须有一个不接受任何参数的公共构造函数。请注意,如果工厂位于命名模块中,则它必须位于由该模块导出到 java.naming 模块的包中。
状态工厂的 getStateToBind() 方法可能会被多次调用,可能使用不同的参数。该实现是线程安全的。
StateFactory 旨在与仅实现 Context 接口的服务提供商一起使用。 DirStateFactory 旨在与实现 DirContext 接口的服务提供商一起使用。
- 自从:
- 1.3
- 参见:
-
方法总结
-
方法详情
-
getStateToBind
Object getStateToBind(Object obj, Name name, Context nameCtx, Hashtable <?, ?> environment) throws NamingException检索对象的状态以进行绑定。NamingManager.getStateToBind()连续加载状态工厂并对它们调用此方法,直到产生非空答案。DirectoryManager.getStateToBind()先后装入国营工厂。如果工厂实现了DirStateFactory,那么DirectoryManager调用DirStateFactory.getStateToBind();否则它调用StateFactory.getStateToBind()。当工厂抛出异常时,异常会传递给
NamingManager.getStateToBind()和DirectoryManager.getStateToBind()的调用者。停止搜索可能产生非空答案的其他工厂。只有在确定它是唯一预期的工厂并且不应尝试其他工厂时,工厂才应抛出异常。如果这个工厂不能使用提供的参数创建一个对象,它应该返回 null。name和nameCtx参数可以选择性地用于指定正在创建的对象的名称。有关详细信息,请参阅ObjectFactory.getObjectInstance()中“名称和上下文参数”的描述。如果工厂使用nameCtx,它应该将其使用与并发访问同步,因为不保证上下文实现是线程安全的。name和environment参数归调用者所有。该实现不会修改这些对象或保留对它们的引用,尽管它可能会保留对克隆或副本的引用。- 参数:
obj- 要检索其状态的非空对象。name- 此对象相对于nameCtx的名称,如果未指定名称则为 null。nameCtx- 相对于指定name参数的上下文,如果name相对于默认初始上下文,则为 null。environment- 用于创建对象状态的可能为空的环境。- 返回:
- 对象的绑定状态;如果工厂未返回任何更改,则为 null。
- 抛出:
NamingException- 如果此工厂在尝试获取对象状态时遇到异常,并且不会尝试其他工厂。- 参见:
-