2009-07-19 15 views
5

Sto tentando di cercare un server LDAP (Active Directory). Quando analizzo i risultati della ricerca, il metodo hasMoreElements di NamingEnumeration richiede circa 15-20 secondi per essere eseguito quando restituisce false. Non è il caso in cui sta tornando vero. C'è un modo per risolvere questo problema?NamingEnumeration hasMoreElements richiede molto tempo quando restituisce false per LDAP

Codice:

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 
    } 

risposta

0

AD ha un limite predefinito di numero di oggetti ritorna in una query LDAP. Penso che sia nella gamma di 1000 oggetti.

Se si preme 1001, si ottiene 1000 restituiti, quindi un errore, quindi ho potuto vedere che questo è il caso.

Conta quanti oggetti torni in un test, e betcha hai battuto 1000 e poi fallito.

6

Il NamingEnumeration esegue una pulizia quando si chiama hasMoreElements() l'ultima volta. Controlla anche se ci sono ulteriori riferimenti è la proprietà di contesto Context.REFERRAL impostata su "segui". In un caso nel nostro software ciò ha causato esattamente il comportamento come descritto: L'ultima chiamata a hasMoreElements() (oppure a hasMore() o chiamando next() più spesso di quanto consentito) ha causato fino a 40 secondi durante la ricerca di referral nel contesto LDAP. La soluzione è non impostare Context.REFERRAL in "seguire".

+0

ha funzionato per me rimuovendo 'setReferral (" follow ")' – manikanta

Problemi correlati