Unboundid InMemory LDAP SDK - сервер не выключится - PullRequest
0 голосов
/ 10 ноября 2011

Я использую Unboundid In-Memory Directory Server в своем приложении, и до сих пор он прекрасно работает (как и намного больше, чем Apache DS).Но когда мое приложение готово и я хочу завершить работу сервера, оно, похоже, «зависает», то есть выполняется команда shutDown (), но поток не останавливается.

InMemoryDirectoryServerConfig configuration = new InMemoryDirectoryServerConfig(baseDNs);
configuration.setListenerConfigs(InMemoryListenerConfig.createLDAPConfig("default", port));
configuration.setSchema(null);
server = new InMemoryDirectoryServer(configuration);
server.startListening();

LDAPConnection ldapConnection = new LDAPConnection("localhost", PORT);

// lots of processing the LDAP data

ldapConnection.close();
server.shutDown("default", true);

Этовыполняется без исключения или чего-то еще, но все равно не закрывается.

Самое смешное, если я выполню приведенный выше код без обработки, он будет работать.

EDIT

Кодирование обработки обычно вызывает ldapConnection.search() и ldapConnection.getEntry() несколько раз для получения некоторой информации о пользователе и группе.Затем он создает объекты, используя эту информацию, и затем вставляет их в БД.

РЕДАКТИРОВАТЬ 2

Не имеет значения, если вызывается shutDown("default",true) или shutDown(true).Я собираюсь проверить другие вещи, которые вы упомянули позже.

1 Ответ

1 голос
/ 10 ноября 2011

Я никогда не слышал, чтобы кто-то еще сообщал о проблеме с отключением сервера каталогов в памяти.Что именно вы подразумеваете под не закрытие?Вы имеете в виду, что все еще работают один или несколько потоков?Это все еще принимает соединения от клиентов LDAP?Существующие соединения все еще установлены?Проблема возникает постоянно или только время от времени?Видите ли вы разницу в поведении, если вы вызываете shutDown (true) для выключения всех прослушивателей, а не shutDown («default», true), чтобы попытаться отключить только прослушиватель «по умолчанию»?

Если кажетсячто один или несколько потоков все еще работают, не могли бы вы предоставить трассировку стека всех активных потоков?Вы должны быть в состоянии получить это, используя команду jstack или отправив "kill -3" процессу JVM.Было бы также полезно, если бы вы могли включить отладку LDAP SDK, установив для свойства com.unboundid.ldap.sdk.debug.enabled значение true при запуске JVM или вызвав com.unboundid.util.Debug.setEnabled (true).».Если при попытке выполнить отключение каким-либо образом обнаруживается исключение, то включение отладки должно сделать это видимым, чтобы мы могли лучше понять, что происходит.

Neil

...