我已經使用Apache commons-pool爲LDAP連接實現了一個池。我無法使用JNDI提供的池功能(http://download.oracle.com/javase/jndi/tutorial/ldap/connect/pool.html),因爲我使用SSL連接(使用自定義(Oracle提供的)套接字工廠(java.naming.ldap.factory.socket
env值集合)將上下文從JNDI池中取消限定)到LDAP服務器,因此即使設置了相應的池屬性,JNDI中的池設施也會自動禁用。什麼是最簡單(即最不復雜)的LDAP操作
現在談到池的實例InitialDirContext
返回到池並需要檢查它是否仍然可用並且尚未被用戶關閉或丟失了到LDAP服務器的連接到其他原因。
這是我目前正在查找的DN已知的特定用戶的存在:
final InitialDirContext ctx = internalPooledLDAPConnection.getCtx();
final Subscriber sub = internalPooledLDAPConnection.getSub();
SearchControls ctls = new SearchControls();
ctls.setSearchScope(2);
ctls.setReturningAttributes(new String[] { "dn"});
NamingEnumeration resultSet = ctx.search(sub.getUserSearchBase()[0], "(&(objectclass=*)(uid=orcladmin))", ctls);
如果此操作不拋出任何異常,然後我的內部池LDAP連接內InitialDirContext
仍然是可用並且可以安全地從池中重新使用。
但是,我想知道這是否是可以在這裏執行的'最便宜的'連接健全性檢查,或者是否存在我可以使用的更便宜的LDAP操作。
謝謝您的建議。不幸的是我不能從JNDI切換到其他的東西,因爲我使用了一些Oracle JNDI LDAP連接的應用服務器庫。 – BertNase 2011-05-05 11:08:02