1、准备工作
1.1 需要的软件环境
现在我们都已经都使用java 1.4 版本了,或者更高的版本,所以,java的版本这就不详细说了。
服务提供商(Service Provider Software)。从之前的jndi架构图可以知道,针对不同的jndi服务,我们会需要不同的SPI,这个
SPI就是服务提供商(Service Provider Software)提供的接口。
在这个教程里,我们主要使用以下两个 SPI:
1) 文件系统的jndi SPI
2) LDAP的 jndi SPI
你可以在 http://java.sun.com/products/jndi/serviceproviders.html 找到相应的SPI,然后下载。
命名和目录服务器。在这个文档里,我们会以LDAP为例子来介绍,你可以在 http://www.openldap.org/ 下载免费的LDAP服务器。
1.2 初始化内容上下文(Initial Context)
在使用任何命名或者目录服务的操作之前,你都必须初始化内容上下文--这是一个起点,这是因为所有的操作,都必须基于一个
特定的内容上下文才可以。初始化内容上下文,你必须遵守以下的步骤:
1) 选择好 服务提供商(Service Provider Software)
2) 确定一些初始化的配置
3) 调用 InitialContext 这个构造函数。
选择好 服务提供商(Service Provider Software)。
你可以使用以下的方法来实现这个功能:
- Hashtable env = new Hashtable();
- env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
上面那个例子是LDAP的,你也可以使用文件系统的,看下面的例子:
- Hashtable env = new Hashtable();
- env.put
- (Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
当然有的SPI可能需要更多的配置信息,例如:
- env.put(Context.PROVIDER_URL, "ldap://ldap.wiz.com:389");
- env.put(Context.SECURITY_PRINCIPAL, "joeuser");
- env.put(Context.SECURITY_CREDENTIALS, "joepassword");
对于文件系统的SPI,可能有如下的配置:
- env.put(Context.PROVIDER_URL, "file:/tmp/tutorial/");
那么如何初始化内容上下文?使用下面的方式:
- Context ctx = new InitialContext(env);
为了访问目录服务,你应该换一个初始化方式:
- DirContext ctx = new InitialDirContext(env);
这些配置你也可以放到属性配置文件( .properties )里,在高级应用中我们再讨论。