2009-07-19 17 views
5

LDAPサーバー(Active Directory)を検索しようとしています。検索結果を解析するとき、NamingEnumerationhasMoreElementsメソッドは、falseを返すときに実行するのに約15-20秒かかります。それが真実を返すときはそうではありません。この問題を解決する方法はありますか?NamingEnumeration hasMoreElementsメソッドは、LDAPに対してfalseを返すときに多くの時間を要します。

コード:

SearchControls ctrl = new SearchControls(); 
ctrl.setSearchScope(SearchControls.SUBTREE_SCOPE); 
String searchFilter = "(&(objectClass=user("uid"="abc"))"; 
NamingEnumeration ne = dirContext.search("ldap://abc:389/dc=abc,dc=xy", searchFilter,ctrl); 

if (ne != null) { 
    while (ne.hasMoreElements()) { 
     //parse results 
    } 

答えて

0

ADは、LDAPクエリで返されたオブジェクトの数のデフォルトの制限があります。私はそれが1000のオブジェクト範囲にあると思う。

1001に達した場合、1000が返されてエラーが発生するため、この場合がわかります。

テストで戻ったオブジェクトの数をカウントし、1000を超えて失敗する確率を計算します。

6

NamingEnumeration最後にhasMoreElements()を呼び出すときにクリーンアップを行います。コンテキスト照会Context.REFERRALが「follow」に設定されているかどうかを確認します。私たちのソフトウェアの場合、これは以下のような振る舞いを示しています。最後にhasMoreElements()(またはhasMore()に電話をかけるか、許可するよりも頻繁にnext()を呼び出す)は、LDAPコンテキストで参照が検索されるまで最大40秒かかりました。解決方法は、Context.REFERRALを "follow"に設定しないことです。

+0

私には 'setReferral(" follow ")'を削除してくれました。 – manikanta