【发布时间】:2011-09-22 09:54:28
【问题描述】:
我想通过设置com.sun.jndi.ldap.connect.timeout 属性来控制连接超时。它适用于 1000 毫秒以下的值,但如果我设置大于 1000 的值,超时不会增加(它保持在 1000)。
这是我尝试测试的代码(服务器已关闭):
long start = System.currentTimeMillis();
try
{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:10389");
env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
env.put(Context.SECURITY_CREDENTIALS, "secret");
env.put("com.sun.jndi.ldap.connect.timeout", "10000");
InitialLdapContext context = new InitialLdapContext(env, null);
} catch (NamingException e)
{
System.out.println("Failed because " + e.getRootCause()
.getMessage() + ". Timeout: " + ((System.currentTimeMillis() - start)) + " ms.");
}
这可能是什么原因?
【问题讨论】:
-
似乎与我将 PROVIDER_URL 设置为 localhost 的事实有关。我在 java.net 类中进行了一些调试,发现超时已正确传递给本机方法。将提供程序更改为 localhost 以外的其他内容会使其等待指定的时间。