JNDI定义了一个Serializable接口类来为应用信息的表达提供一种统一的方式。Serializable接口类包含了诸如地址、类型信息等用于访问具体对象的信息。为了能将对象的引用绑定到目录树中,该对象的类必须实现Referenceable接口,其中包含了方法 getReference()。开发者可以在该对象上调用getReference()方法来获得Reference以用于绑定。Serializable接口与Referenceable接口有颇多相似之处,不同在于Referenceable可引用的对象只包含一些用于创建实际对象的信息,而Serializable会包含更多的甚至不适合存储在目录结构中的信息。
(2)绑定保存对象程序
package jndi;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.*;
public class ldapDataBind {
public static void main(String[]args){
//创建Hashtable以存储JNDI将用于连接目录服务的环境变量
Hashtable hs = new Hashtable();
//设置连接LDAP的实现工厂
hs.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
// 指定LDAP服务器的主机名和端口号
hs.put(Context.PROVIDER_URL, "ldap://localhost:389 ");
//给环境提供认证方法,有SIMPLE、SSL/TLS和SASL
hs.put(Context.SECURITY_AUTHENTICATION, "simple");
//指定进入的目录识别名DN
hs.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager");
//进入的目录密码
hs.put(Context.SECURITY_CREDENTIALS, "password");
try {
// 得到初始目录环境的一个引用
DirContext ctx = new InitialDirContext(hs);
// 新建一个对象
persons perObj = new persons("jordan","40");
//绑定对象
ctx.rebind ("uid = Jordan,ou = Bull,o = NBA ",perObj);
System.out.println("bind object object success " );
/*实例化一个属性集合*/
Attributes attrs = new BasicAttributes(true);
/*建立一个属性,其属性名为"mail"*/
Attribute personMail = new BasicAttribute("mail");
//设置属性"mail"的值为"xie@163.com"、"liu@sina.com.cn"、
"xyh@powerise.com.cn"
personMail.add("xie@163.com");
person