2

Oracle Internet Directory 11g (ldapjclnt11.jar ライブラリ) にアクセスするために、Oracle の Java API Extensions to JNDI を使用しています。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 に答える