我正在使用Oracle的Java API扩展到JNDI来访问Oracle Internet Directory 11g(ldapjclnt11.jar库)。通过调用ConnectionUtil.getDefaultDirCtx()创建一个新的dir上下文(连接)。
我的问题是:这种与OID建立连接的机制是否为JNDI连接使用某种连接池?如果没有,有没有办法汇集连接?
我将使用OID同时对数百个用户进行身份验证,如果我不汇集我的OID连接,我担心性能会受到影响。
答案 0 :(得分: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或其他东西来验证行为。