Метод NamingEnumeration hasMoreElements занимает много времени при возврате false для LDAP - PullRequest
5 голосов
/ 19 июля 2009

Я пытаюсь найти сервер LDAP (Active Directory). Когда я анализирую результаты поиска, метод hasMoreElements из NamingEnumeration занимает около 15-20 секунд для выполнения, когда он возвращает false. Это не тот случай, когда он возвращает истину. Есть ли способ решить эту проблему?

Код:

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
    }

Ответы [ 2 ]

7 голосов
/ 10 ноября 2010

NamingEnumeration выполняет некоторую очистку при вызове hasMoreElements() в последний раз. Он также проверяет, есть ли дополнительные ссылки, для свойства context Context.REFERRAL установлено значение «follow». В одном случае в нашем программном обеспечении это вызвало именно такое поведение, как описано: последний вызов hasMoreElements() (или hasMore() или вызов next() чаще, чем разрешено) вызывал до 40 секунд при поиске рефералов в контексте LDAP , Решение состоит в том, чтобы не устанавливать Context.REFERRAL на «следовать».

0 голосов
/ 20 июля 2009

AD имеет ограничение по умолчанию на количество объектов, которые оно возвращает в запросе LDAP. Я думаю, что это в диапазоне 1000 объектов.

Если вы нажмете 1001, вы получите 1000 возвращенных, а затем ошибку, поэтому я могу видеть, что это так.

Подсчитайте, сколько объектов вы вернули в тесте, и, поверьте, вы победили 1000, а затем потерпели неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...