Мы используем javax.naming.ldap.LdapContext для подключения и запроса openLdap.
Проблема в том, что мы получаем com.sun.jndi.ldap.LdapSearchEnumeration в качестве результатов, и его цикл действительно медленный, например, 5 SearchResult в секунду.
Я также попробовал с apache ldap api и я получаю то же самое время, если только я не принесу меньше атрибутов, но он все еще медленный. Чтобы получить 180 результатов, требуется 10 секунд.
Пример кода jndi ldap:
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://aplivolatil....:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "uid=usuarioLector.....");
env.put(Context.SECURITY_CREDENTIALS, "9IVNOaQmEeE");
env.put(Context.BATCHSIZE, "1000");
env.put(Context.REFERRAL, "ignore");
LdapContext contexto;
try {
//contexto = new InitialLdapContext(env, null);
contexto = new InitialLdapContext(env, null);
SearchControls controlesBusqueda = new SearchControls();
String [] attrs = new String [] {"cn"};
controlesBusqueda.setReturningAttributes(attrs);
controlesBusqueda.setSearchScope(1);
NamingEnumeration<SearchResult> resultadosObjetos = contexto.search("cn=usuarios-......",
"(&(objectClass=inetOrgPerson))", controlesBusqueda);
while (resultadosObjetos.hasMore()) {
resultadosObjetos.next();
}
Итак, после исследования и нескольких тестов мы выяснили, что при установке свойства среды jndi ldap «batchsize» равным 1000, такая же задержка относится к методу поиска, а не к зацикливанию результатов. Это имеет смысл в том смысле, что API собирался использовать ldap при каждом следующем (), может быть. Но почему так много задержек?
С rootDN идет очень быстро, 1 секунда, может что-то не так с пользователем, которого он использует для поиска? который явно не является rootDN?