2011-11-10 33 views
0

我在我的應用程序中使用Unboundid內存目錄服務器,到目前爲止它工作得很好(比Apache DS好得多)。但是,當我的應用程序完成時,我想關閉服務器,它似乎「掛起」,即執行shutDown()命令,但線程不會停止。Unboundid InMemory LDAP SDK - 服務器不會關機

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); 

它執行時沒有拋出任何東西,但它仍然不會關閉。

有趣的是,如果我執行上面的代碼W/O處理,它的工作原理。

EDIT

處理編碼基本上調用ldapConnection.search()ldapConnection.getEntry()幾次以獲得一些用戶和組信息。然後使用這些信息創建對象,然後將它們插入到數據庫中。

EDIT 2

這沒有什麼區別,如果shutDown("default",true)shutDown(true)被調用。我要測試你後面提到的其他事情。

+1

我無法重現您描述的行爲。什麼處理完成?另請參見[內存目錄服務器](http://wp.me/p52Sb-gM)。 –

回答

1

我從來沒有聽說別人報告過內存中的目錄服務器沒有關閉的問題。你的意思是什麼,不會關閉?你的意思是還有一個或多個線程仍在運行?它是否仍然接受來自LDAP客戶端的連接?現有的連接是否仍然建立?問題是否持續發生,還是偶爾發生?如果您調用shutDown(true)關閉所有偵聽器而不是shutDown(「default」,true)以嘗試關閉「默認」偵聽器,您是否發現行爲有任何不同?

如果看起來一個或多個線程仍在運行,您能否提供所有活動線程的堆棧跟蹤?您應該可以使用jstack命令或向JVM進程發送「kill -3」。如果您可以通過在啓動JVM時將com.unboundid.ldap.sdk.debug.enabled屬性設置爲true,或通過調用「com.unboundid.util.Debug.setEnabled(true)」來啓用LDAP SDK調試, 」。如果嘗試執行關閉時某種異常被捕獲,那麼啓用調試應該使其可見,以便我們能夠更好地理解發生的事情。

Neil