文档

Java™教程
隐藏目录
设置Ldap操作的超时时间
导航:Java命名和目录接口
课程:JDK 5.0和JDK 6中的新特性

设置Ldap操作的超时时间

当客户端向服务器发出LDAP请求,而服务器由于某种原因没有响应时,客户端会一直等待服务器响应,直到TCP超时。在客户端上,用户所经历的实质上是一个进程挂起的过程。为了及时控制LDAP请求,可以为JNDI/LDAP服务提供者配置读取超时,自Java SE 6开始。

新的环境属性:

com.sun.jndi.ldap.read.timeout

可以用于指定LDAP操作的读取超时时间。该属性的值是表示LDAP操作的读取超时时间的毫秒数的整数的字符串表示。如果LDAP提供者在指定的时间内未收到LDAP响应,则中止读取尝试。整数值应大于零。小于或等于零的整数表示未指定读取超时,即等待响应直到无限期收到,默认为原始行为。

如果未指定此属性,默认情况下等待响应直到收到响应。
例如,env.put("com.sun.jndi.ldap.read.timeout", "5000");会导致LDAP服务提供者在服务器未在5秒内响应时中止读取尝试。

下面是一个示例,ReadTimeoutTest,它使用一个不响应LDAP请求的虚拟服务器来展示设置非零值时该属性的行为。

env.put(Context.INITIAL_CONTEXT_FACTORY,
        "com.sun.jndi.ldap.LdapCtxFactory");
env.put("com.sun.jndi.ldap.read.timeout", "1000");
env.put(Context.PROVIDER_URL, "ldap://localhost:2001");

Server s = new Server();

try {

    // start the server
    s.start();
 
   // Create initial context
   DirContext ctx = new InitialDirContext(env);
   System.out.println("LDAP Client: Connected to the Server");
        :
        :
} catch (NamingException e) {
   e.printStackTrace();
}

上述程序会打印下面的堆栈跟踪,因为当创建InitialDirContext时,服务器甚至不会响应LDAP绑定请求。客户端在等待服务器响应时超时。

Server: Connection accepted
javax.naming.NamingException: LDAP response read timed out, timeout used:1000ms.
:
:

at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:82)
at ReadTimeoutTest.main(ReadTimeoutTest.java:32)

请注意,该属性与另一个环境属性com.sun.jndi.ldap.connect.timeout不同,后者设置与服务器建立连接的超时时间。读取超时适用于在与服务器建立初始连接后从服务器接收的LDAP响应。


上一页: 操作相对区分名称 (RDN)
下一页: 路径结尾