我们的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浏览器我的速度如此之快?