存储和读取对象

应用程序和服务可以通过不同的方式使用目录来存储和定位对象:

  • 存储对象本身(的副本)。

  • 存储对对象的引用。

  • 存储描述对象的属性。

一般而言,Java 对象的序列化形式以可用于联系对象的地址信息的紧凑表示形式包含对象的状态和对象的引用。 查找对象类中提供了一些示例。对象的属性是用于描述对象的属性。属性可能包括地址和/或状态信息。

这三种使用方式中的哪一种取决于正在构建的应用程序/系统,以及与共享目录中存储的对象的其他应用程序和系统进行交互的方式。另一个因素是服务提供商和基础目录服务提供的支持。

以编程方式,将对象存储在目录中时,所有应用程序都使用以下方法之一:

应用程序将要存储的对象传递给这些方法之一。然后,根据服务提供者支持的对象类型,将对象转换为基础目录服务可接受的表示形式。

本类显示了如何在对象存储后将可序列化的对象存储在目录中,无论实际存储了哪种类型的信息,您都可以简单地使用lookup()从目录中获取该对象的副本。

您不仅可以使用lookup\(\)来获取对象,还可以在list上下文时和search上下文或其子树时获取对象。在所有这些情况下,都可能涉及对象工厂。 JNDI Tutorial中详细讨论了对象工厂。

有关存储以下对象类型的信息,请参考 JNDI 教程:


continue 进行之前: 要成功运行这些示例,必须关闭服务器中的 Pattern 检查,或者将本教程随附的JavaPattern添加到服务器。此任务通常由目录服务器的 管理 员执行。有关更多信息,请参见Software Setup类。

Windows Active Directory: Context.rebind()DirContext.rebind()对 Active Directory 不起作用,因为这些方法通过读取要更新的条 Object 属性,删除条目,然后添加包含修改后的属性的新条目来起作用。 Active Directory 返回一些用户无法设置的属性,从而导致最后的添加步骤失败。此问题的解决方法是使用DirContext.getAttributes()获取并保存要保留的属性。然后,删除条目并使用DirContext.bind()将其与保存的属性(以及您要添加的任何其他属性)一起添加回去。