#java #ldap
Работаю с LDAP на Java. При первом запуске программы, все проходит отлично, данные
приходят нормально. Но если пройдет некоторые время, 1-2 часа, то программа начинает
выдавать Exception
Problem searching directory: javax.naming.CommunicationException: iat.iat:389
[Root exception is java.net.ConnectException: Connection timed out: connect]
И проблема решается, если перезагрузить ПК, на котором запущена программа. Кто знает,
как решить проблему?
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put("java.naming.security.principal", "isdgfh@iat.iat");
env.put("java.naming.security.credentials", "ergdfgdfgdf");
env.put("java.naming.provider.url", "ldap://iat.iat:636/DC=iat,DC=iat");
env.put(Context.PROVIDER_URL, ldapURL);
try {
LdapContext ctx = new InitialLdapContext(env, null);
SearchControls searchCtls = new SearchControls();
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
// Фильтр для поиска группы по никнейму
String searchFilter = "(sAMAccountName=" + username + ")";
// Где Искать
String searchBase = "DC=iat,DC=iat";
//Член
String returnedAtts[] = {"member"};
//String returnedAtts[] = null;
searchCtls.setReturningAttributes(returnedAtts);
System.out.println(username);
NamingEnumeration answer = ctx.search(searchBase, searchFilter, searchCtls);
//Выборка из AD по логину
while (answer.hasMoreElements()) {
sr = (SearchResult) answer.next();
sr2 = sr.toString();
}
ctx.close();
} catch (NamingException e) {
System.err.println("Problem searching directory: " + e);
}
return sr2;
Ответы
Ответ 1
Для начала стоит понять не текут ли соединения. Для этого можно сделать heap dump (используя, например, jmap), когда после нескольких часов программа стала выдавать java.net.ConnectException и посмотреть на него в Eclipse MAT, YourKit или чём нибудь ещё. Искать стоит соединения, которые используются внутри LdapContext'а. Также стоит перенести закрытие контекста в finally, т. к. соединения могут течь в случае javax.naming.NamingException.
Комментариев нет:
Отправить комментарий