来自Java的LDAP查询很慢

时间:2013-05-13 09:25:34

标签: java java-ee ldap jndi

我们的LDAP和Java Server出现了一些性能问题。每当我们调用我们的LDAP查询时,它看起来像(&(objectclass = person)(department = 0128)(departmentNumber = 1)),它需要大约2000毫秒,这对我们来说太慢了。

但是,如果我们使用标准LDAP浏览器使用相同的查询(例如,来自网络的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浏览器我的速度如此之快?

0 个答案:

没有答案