Недопонимание в NetBean s 6.1 (или может в Java)
"Артем Каялайнен" <[email protected]> Wed, 1 Oct 2008 12:53:24 +0400
| Newsgroups | gmane.comp.java.netbeans.general.russian |
|---|---|
| Message-ID | <[email protected]> |
Доброго времени суток!
Собственно сегодня поставил NetBeans, так как на моей машине оракловый
JDeveloper некомфортно себя чувствует.
Моя цель - написать программу, которая будет отображать статус подключения
пользователей на терминальных серверах. Писать я собрался на java, потому
как другие языки знаю еще меньше :)
Информация о пользователях берется из ldap каталога Active Directory. В
инете нашел способ сделать это через jndi и успешно скопипастил пример и
причесал его под свои нужды. Все вроде прекрасно работает. Но работает
как-то странно.
Вот что есть (это я так, тестовый класс набросал)
public class ldapAccesser {
public ldapAccesser() {
ldap();
}
public static void main(String[] args) {
new ldapAccesser();
}
public void ldap() {
System.out.println("Начинаем получать аккаунты из AD");
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.DNS_URL,"dns://boss.domain.ru/domain.ru");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL,
"CN=xxx,CN=Users,DC=domain,DC=ru");
env.put(Context.SECURITY_CREDENTIALS, "12345678");
String ldapURL = "ldap://boss2.domain.ru:3268";
env.put(Context.PROVIDER_URL, ldapURL);
try {
LdapContext ctx = new InitialLdapContext(env, null);
SearchControls searchCtls = new SearchControls();
String returnedAtts[] = {"cn", "distinguishedName",
"sAMAccountName"};
searchCtls.setReturningAttributes(returnedAtts);
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String searchFilter =
"(&(objectClass=user)(!(objectClass=computer))(mail=*))";
String searchBase = "DC=pskk,DC=ru";
NamingEnumeration answer = ctx.search(searchBase, searchFilter,
searchCtls);
while (answer.hasMoreElements()) {
SearchResult sr = (SearchResult) answer.next();
Attributes attrs = sr.getAttributes();
if (attrs != null) {
try {
String dep =
attrs.get("distinguishedName").get().toString();
int index = dep.indexOf("OU=");
int index2 = dep.indexOf(",", index + 3);
dep = dep.substring(index + 3, index2);
if (dep.matches("Уволенные сотрудники") ||
dep.matches("Дирекция") || dep.matches("Отдел ИТ")) {
System.out.println("skipped " + dep );
} else {
String cn = attrs.get("cn").get().toString();
String dn =
attrs.get("distinguishedName").get().toString();
String sAMAccountName =
attrs.get("sAMAccountName").get().toString();
boolean isTsUser = false;
if (dn.indexOf("Ts_Users") == -1) {
isTsUser = false;
} else {
isTsUser = true;
}
System.out.println("Нашли аккаунт: " + cn + ":" +
sAMAccountName + ":" + dep);
}
} catch (NullPointerException e) {
System.err.println("Ошибка при получении данных
акканута из AD: " + e.getMessage());
System.exit(1);
}
}
}
ctx.close();
System.out.println("Connection Closed...");
} catch (NamingException e) {
System.out.println("Problem connecting: " + e.getMessage());
}
}
}
Запускаю main этого класса - все отлично, в консоль вываливаются все данные,
что программа нашла в AD.
Но как только я пытаюсь создать объект этого класса еще где-нибудь (я
пытался все найденные данные из AD запихать в вектор, который был бы
параметром объекта класса) - программа просто виснет на LdapContext ctx =
new InitialLdapContext(env, null). Не вываливается в exception, просто
зависает на этом месте.
Может вы сможете мне объяснить, что я делаю не так?