Some times, ldap threads are not returning in the pool. They are attempting to read data from their sockets.
That problem is well described at http://blogs.warwick.ac.uk/kieranshaw/entry/ldap_connection_pooling/.
We need to enforce naming enumeration uses by adding a finally block for closing.
NamingEnumeration x = ...; try { ... } finally { x.close(); }
Here is the list of classes being impacted : LDAPSession,LDAPReference,LDAPTreeReference,LDAPFilterMatcher.