LDAP と Java サーバーでパフォーマンスの問題が発生しています。(&(objectclass=person)(department=0128)(departmentNumber=1))のような LDAP クエリを呼び出すたびに、約 2000 ミリ秒かかりますが、これは私たちにとって遅すぎます。
ただし、標準の LDAP ブラウザ (Web の LDAP 管理プログラムなど) で同じクエリを使用して検索を実行すると、数ミリ秒しかかかりません。
簡略化されたコードは次のとおりです。
public static void main(String[] args) throws NamingException {
Hashtable<String, String> env = new Hashtable<String, String>(); // NOPMD
env.put(Context.PROVIDER_URL, "ldap://abc123.muc:389");
env.put(Context.SECURITY_PRINCIPAL, "CN=myproject,OU=projectusers,DC=COM");
env.put(Context.SECURITY_CREDENTIALS, "asdf");
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
LdapContext iLeanLdapCtx = new InitialLdapContext(env, null);
//TIME TO CREATE CONTEXT = 40ms
String filter = "(&(objectclass=person)(department=0128)(departmentNumber=1))";
NamingEnumeration<SearchResult> results = iLeanLdapCtx.search("O=computers,DC=COM", filter, null);
//TIME TO SEARCH WITH FILTER = 2000ms
NamingEnumeration<SearchResult> results2 = iLeanLdapCtx.search("O=computers,DC=COM", filter, null);
//2nd TIME TO SEARCH WITH FILTER = 2000ms
}
ここで初期化の問題が発生していますか?
LdapContext をインスタンス化することで、時間のかかる問題をすべて解決できるはずだと思いました。ldapCtx.searchには約 2 秒かかります。もう一度呼び出すと、まだ 2 秒です。そのため、最初の検索では初期化が行われないようです。また、クエリが単純にそれほど遅い場合でも、私が持っている他の LDAP ブラウザはなぜこれほど高速なのだろうか?