2009-07-19 17 views
5

Estoy intentando buscar en un servidor LDAP (Active Directory). Cuando analizo los resultados de búsqueda, el método hasMoreElements de NamingEnumeration tarda alrededor de 15-20 segundos en ejecutarse cuando devuelve falso. No es el caso cuando está volviendo verdadero. ¿Hay alguna manera de resolver este problema?El método NamingEnumeration hasMoreElements lleva mucho tiempo al devolver false para LDAP

Código:

SearchControls ctrl = new SearchControls(); 
ctrl.setSearchScope(SearchControls.SUBTREE_SCOPE); 
String searchFilter = "(&(objectClass=user("uid"="abc"))"; 
NamingEnumeration ne = dirContext.search("ldap://abc:389/dc=abc,dc=xy", searchFilter,ctrl); 

if (ne != null) { 
    while (ne.hasMoreElements()) { 
     //parse results 
    } 

Respuesta

0

AD tiene un límite predeterminado de número de objetos que regresa en una consulta LDAP. Creo que está en el rango de 1000 objetos.

Si tocas 1001, obtienes 1000 devoluciones, luego un error, por lo que podría ver que este es el caso.

Cuenta cuántos objetos obtienes en una prueba, y betcha vences 1000 y luego fallas.

6

El NamingEnumeration hace algo de limpieza al llamar al hasMoreElements() la última vez. También verifica si hay referencias adicionales en el contexto: la propiedad Context.REFERRAL está configurada como "seguir". En un caso en nuestro software, esto causó exactamente el comportamiento descrito: La última llamada al hasMoreElements() (o al hasMore() o llamando al next() con más frecuencia de la permitida) causó hasta 40 segundos a medida que se buscan referencias en el contexto LDAP. La solución es no configurar Context.REFERRAL para "seguir".

+0

funcionó para mí eliminando 'setReferral (" follow ")' – manikanta

Cuestiones relacionadas