title: java.net.ConnectException: Connection timed out when connecting to ldap
body: <p>i am trying to connect to <strong>ldap active directory</strong> on <strong>windows server 2008</strong> using <strong>spring ldap 1.3.1.RELEASE</strong>
  and ldap config is as follows:</p>
  
  <ul>
  <li><strong>ldap url</strong> is: ldap://dc.fabrikam.com</li>
  <li><strong>username</strong>: administrator</li>
  <li><strong>password</strong>: 123456</li>
  </ul>
  
  <p><strong>- spring ldap configuration</strong> is as follows:</p>
  
  <pre><code>    &lt;bean id="contextSource" 
      class="org.springframework.ldap.core.support.LdapContextSource"&gt;
      &lt;property name="url" value="ldap://dc.fabrikam.com" /&gt;
      &lt;property name="base" value="dc=fabrikam,dc=com" /&gt;     
      &lt;property name="userDn" value="CN=administrator,CN=Users,DC=fabrikam,DC=com" /&gt;     
      &lt;property name="password" value="123456" /&gt;
  
  
      &lt;property name="baseEnvironmentProperties"&gt;
      &lt;map&gt;
          &lt;entry key="java.naming.referral"&gt;
              &lt;value&gt;follow&lt;/value&gt;
          &lt;/entry&gt;
      &lt;/map&gt;
      &lt;/property&gt;
  
  &lt;/bean&gt;
  
  &lt;bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate"&gt;
      &lt;constructor-arg ref="contextSource" /&gt;
  &lt;/bean&gt;
  </code></pre>
  
  <ul>
  <li><p><strong>LDAPContactDAO:</strong></p>
  
  <pre><code>@Service
  public class LDAPContactDAO implements ContactDAO {
  
  @Autowired
  private LdapTemplate ldapTemplate;
  
  public List getAllContactNames() {
      return ldapTemplate.search("", "(objectclass=person)",
              new AttributesMapper() {
                  public Object mapFromAttributes(Attributes attrs)
                          throws NamingException {
                      return attrs.get("cn").get();
                  }
              });
  }
  
  }
  </code></pre></li>
  </ul>
  
  <p>-debugs before the exception:</p>
  
  <pre><code>2012-12-31/15:50:36.425 [localhost-startStop-1] DEBUG AuthenticationSource not set - using default implementation
  2012-12-31/15:50:36.428 [localhost-startStop-1] DEBUG Not using LDAP pooling
  2012-12-31/15:50:36.428 [localhost-startStop-1] DEBUG Trying provider Urls: ldap://192.168.1.118/dc=fabrikam,dc=com
  2012-12-31/15:50:37.558 [http-bio-8080-exec-5] DEBUG Got Ldap context on server 'ldap://192.168.1.118/dc=fabrikam,dc=com'
  </code></pre>
  
  <p>when trying to use the getAllContactNames method, i am getting the following exception:</p>
  
  <pre><code>org.springframework.ldap.CommunicationException: fabrikam.com.com:389; nested exception is javax.naming.CommunicationException: fabrikam.com.com:389 [Root exception is java.net.ConnectException: Connection timed out: connect]
  org.springframework.ldap.support.LdapUtils.convertLdapException(LdapUtils.java:100)
  org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:319)
  org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:259)
  org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:571)
  org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:556)
  org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:411)
  org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:431)
  org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:451)
  com.xeno.advancedphonedirectory.LDAPContactDAO.getAllContactNames(LDAPContactDAO.java:20)
  com.xeno.advancedphonedirectory.web.IndexController.get(IndexController.java:20)
  sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  java.lang.reflect.Method.invoke(Method.java:597)
  org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
  org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
  org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
  org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
  org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
  org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
  org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
  
  java.net.ConnectException: Connection timed out: connect
      at java.net.PlainSocketImpl.socketConnect(Native Method)
      at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
      at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
      at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
      at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
      at java.net.Socket.connect(Socket.java:529)
      at java.net.Socket.connect(Socket.java:478)
      at java.net.Socket.&lt;init&gt;(Socket.java:375)
      at java.net.Socket.&lt;init&gt;(Socket.java:189)
      at com.sun.jndi.ldap.Connection.createSocket(Connection.java:352)
      at com.sun.jndi.ldap.Connection.&lt;init&gt;(Connection.java:187)
      at com.sun.jndi.ldap.LdapClient.&lt;init&gt;(LdapClient.java:118)
      at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1580)
      at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2652)
      at com.sun.jndi.ldap.LdapCtx.&lt;init&gt;(LdapCtx.java:293)
      at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)
      at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:134)
      at com.sun.jndi.url.ldap.ldapURLContextFactory.getObjectInstance(ldapURLContextFactory.java:35)
      at javax.naming.spi.NamingManager.getURLObject(NamingManager.java:584)
      at javax.naming.spi.NamingManager.processURL(NamingManager.java:364)
      at javax.naming.spi.NamingManager.processURLAddrs(NamingManager.java:344)
      at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:316)
      at com.sun.jndi.ldap.LdapReferralContext.&lt;init&gt;(LdapReferralContext.java:93)
      at com.sun.jndi.ldap.LdapReferralException.getReferralContext(LdapReferralException.java:132)
      at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1838)
      at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1749)
      at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:368)
      at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:338)
      at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:321)
      at javax.naming.directory.InitialDirContext.search(InitialDirContext.java:248)
      at org.springframework.ldap.core.LdapTemplate$4.executeSearch(LdapTemplate.java:253)
      at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:293)
      at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:259)
      at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:571)
      at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:556)
      at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:411)
      at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:431)
      at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:451)
      at com.xeno.advancedphonedirectory.LDAPContactDAO.getAllContactNames(LDAPContactDAO.java:20)
      at com.xeno.advancedphonedirectory.web.IndexController.get(IndexController.java:20)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
      at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
      at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
      at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
      at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
      at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
      at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
      at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
      at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
      at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
      at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
      at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
      at java.lang.Thread.run(Thread.java:662)
  </code></pre>
  
  <p>please advise.</p>
  
  <p><strong>UPDATE:</strong></p>
  
  <p>I managed to connect to active directory with <strong>jxplorer</strong> using the following configuration:</p>
  
  <ol>
  <li><strong>Host:</strong> dc.fabrikam.com</li>
  <li><strong>Port:</strong> 389</li>
  <li><strong>Base DN:</strong> dc=fabrikam,dc=com</li>
  <li><strong>User DN:</strong> CN=administrator,CN=Users,DC=fabrikam,DC=com</li>
  <li><strong>Password:</strong> secret</li>
  </ol>
  
  <p>but i still getting timeout with spring ldap connection.</p>
  
  <p><strong>UPDATE2:</strong></p>
  
  <p>the issue is now narrowed to spring ldap because i tried the above configuration with JNDI and connection to ldap works fine as mentioned in here:</p>
  
  <p><a href="https://stackoverflow.com/questions/14136091/ldap-search-is-very-slow">ldap search is very slow</a></p>
  
  <p>i think that the referral property might be the issue.</p>