【发布时间】:2011-05-05 05:18:17
【问题描述】:
我已经使用 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 中的池设施。
现在到了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 操作。
【问题讨论】:
标签: java ldap jndi connection-pooling