2

我正在使用 Oracle 的 Java API Extensions to JNDI 来访问 Oracle Internet Directory 11g(ldapjclnt11.jar 库)。通过调用 ConnectionUtil.getDefaultDirCtx() 创建一个新的目录上下文(连接)。

我的问题是:这种创建与 OID 的连接的机制是否对 JNDI 连接使用某种连接池?如果没有,有没有办法汇集连接?

我将同时使用 OID 对数百名用户进行身份验证,我担心如果我不将 OID 连接池化,性能会受到影响。

4

1 回答 1

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 类不允许设置此属性,但如果必须使用 ConnectionUtil,可以尝试在 JVM 上设置以下属性:

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

不确定这是否会起作用。您必须使用 wireshark 或其他东西来验证行为。

于 2012-01-25T15:42:42.783 回答