2011-08-22 57 views
2

我正在使用Oracle的JNDI Java API擴展訪問Oracle Internet Directory 11g(ldapjclnt11.jar庫)。通過調用ConnectionUtil.getDefaultDirCtx()創建一個新的dir上下文(連接)。使用Oracle Internet Directory進行連接池

我的問題是:這種創建OID連接的機制是否使用JNDI連接的某種連接池?如果沒有,是否有辦法將連接集中起來?

我將與OID同時對數百個用戶進行身份驗證,並且我擔心如果我不彙集OID連接,性能會受到影響。

回答

1

你的恐懼可能是有根據的:池化減少了垃圾收集和套接字連接的暫停時間,但我會高度建議檢查你的假設與像VisualVM這樣的剖析器。我曾經解決過的每個性能問題都不是我認爲的那樣。不要盲目猜測你的代碼!

假設你是在Sun/Oracle的JVM,還有一個屬性來啓用透明池:

Hashtable env = new Hashtable(); 
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=myroot"); 
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
env.put("com.sun.jndi.ldap.connect.pool", "true"); 
DirContext ctx = new InitialDirContext(env); 

的ConnectionUtil類不允許設置該屬性,但你可以嘗試設置下面就您的JVM屬性,如果你使用ConnectionUtil:

如果
-Dcom.sun.jndi.ldap.connect.pool=true 

不知道會的工作,雖然。你將不得不使用wireshark或其他東西來驗證行爲。