这些 Java 教程是针对 JDK 8 编写的。本页面中描述的示例和实践不利用后续版本引入的改进,并且可能使用不再可用的技术。
请参阅 Java 语言更改 以获取 Java SE 9 及后续版本中更新的语言特性摘要。
请参阅 JDK 发行说明 以获取有关所有 JDK 版本的新功能、增强功能以及已删除或弃用选项的信息。
应用程序和服务可以以不同的方式使用目录来存储和定位对象:
一般来说,Java对象的序列化形式包含对象的状态和对象的引用,以一种紧凑的寻址信息表示,可以用来联系对象。一些示例在查找对象教程中给出。对象的属性是用于描述对象的属性,属性可能包括寻址和/或状态信息。
使用哪种方式取决于正在构建的应用程序/系统以及它如何与其他应用程序/系统进行交互,这些应用程序/系统将共享存储在目录中的对象。另一个因素是服务提供商和底层目录服务提供的支持。
从编程的角度来看,所有应用程序在将对象存储到目录中时都使用以下方法之一:
应用程序将要存储的对象传递给这些方法之一。然后,根据服务提供商支持的对象类型,对象将被转换为适合底层目录服务的表示。
本教程展示了如何在目录中存储可序列化对象,一旦对象存储,无论实际存储了什么类型的信息,你都可以简单地使用lookup()从目录中获取对象的副本。
你不仅可以通过使用lookup()来获取对象,还可以在列出一个上下文时和在搜索一个上下文或其子树时获取对象。在所有这些情况下,可能涉及到对象工厂。对象工厂在JNDI教程中详细讨论。
要存储下面的对象类型,请参考JNDI教程:
在继续之前:要成功运行这些示例,您必须在服务器上关闭模式检查,或者将附带本教程的Java模式
添加到服务器中。这个任务通常由目录服务器的管理员执行。有关更多信息,请参阅软件设置课程。
Windows Active Directory:由于Context.rebind()和DirContext.rebind()方法通过读取要更新的条目的属性、删除条目,然后添加包含修改后属性的新条目来工作,所以它们无法针对Active Directory工作。Active Directory返回一些用户无法设置的属性,导致最后的添加步骤失败。解决此问题的方法是使用DirContext.getAttributes()获取并保存要保留的属性。然后,使用DirContext.bind()删除条目并将其与保存的属性(和任何其他要添加的属性)一起添加回去。