Недопонимание в 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, просто
зависает на этом месте.

Может вы сможете мне объяснить, что я делаю не так?