CommunicationException [根异常是ConnectException:连接超时]

时间:2013-05-07 06:29:53

标签: java ldap runtime-error communicationexception connectexception

我在尝试连接Active Directory时偶尔会遇到此异常。

javax.naming.CommunicationException: <ServerIP>:<PORT> 
  [Root exception is java.net.ConnectException: Connection timed out: connect]

这是我的代码:

    DirContext ctx = null;
    Properties env = new Properties();

    env.put(Context.SECURITY_PRINCIPAL, <Bind_USER>);
    env.put(Context.SECURITY_CREDENTIALS, <Bind_USER_PWD>);
    env.put(Context.PROVIDER_URL, "ldap://<ServerIP>:<PORT>");            
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");

    ctx = new InitialDirContext(env);

获取此行ctx = new InitialDirContext(env);中的连接超时异常。 它不会每次都发生,但经常发生。

请告诉我,如何摆脱这个问题?

4 个答案:

答案 0 :(得分:3)

偶尔也会发生这种情况。因为它只发生了〜1%的时间,我怀疑这是Juned的答案中列出的任何原因,因为我的设置没有任何变化。

对我而言,它是随机发生的,并且在我没有采取任何具体行动的情况下修复。这让我相信提供的答案here是正确的:

  

很可能是连接泄漏。连接超时可能由许多事情引起,但大多数事情都会导致它每次都出现。很可能LDAP服务器具有它将同时处理的最大连接数,除此之外它不会调用accept(),因此新的传入连接保留在积压队列中,这会填满,这可能会导致进一步的传入连接超时。

     

@OP当发生这种情况时,你可以在服务器上运行netstat -anp来检查上面的假设吗?您还可以在LDAP服务器上设置连接空闲超时吗?这样可以解决连接泄漏问题,但会以蛮力的方式破坏其他事情。

答案 1 :(得分:0)

虽然配置指向域名(不是IP),但是有同样的间歇性问题。

通过使用NSLOOKUP,发现列出了不存在的DC,导致间歇性连接问题。

答案 2 :(得分:0)

当我将Timer的使用与ScheduledExecutorService的使用互换来启动Ldap Server时,我也开始注意到这一点。问题出在种族问题上。我将Ldap Server的启动时间从0延迟更改为5秒延迟,这似乎已经将java.net.ConnectException解析为我的Ldap Server。

这里存在种族条件:

最终ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor(); ses.scheduleWithFixedDelay(ldapServer,0,5,TimeUnit.SECONDS);

种族状况在这里解决:

最终ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor(); ses.scheduleWithFixedDelay(ldapServer,5,5,TimeUnit.SECONDS);

答案 3 :(得分:0)

移到LDAPS后,我一直遇到相同的错误,我现在正在使用端口636,但我发现连接到的域上的域控制器之一在端口636上被阻塞。

[根本异常是java.net.ConnectException:连接超时:connect]我