2009-07-19 4 views
5

Tôi đang cố gắng tìm kiếm một máy chủ LDAP (Active Directory). Khi tôi phân tích cú pháp kết quả tìm kiếm, phương pháp hasMoreElements của NamingEnumeration mất khoảng 15-20 giây để thực thi khi trả về false. Nó không phải là trường hợp khi nó trở về sự thật. Có cách nào để giải quyết vấn đề này không?NamingEnumeration hasMoreElements phương pháp mất rất nhiều thời gian khi trở về sai cho LDAP

Code:

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 
    } 

Trả lời

0

AD có một giới hạn mặc định của số đối tượng nó sẽ trả về trong một truy vấn LDAP. Tôi nghĩ nó nằm trong phạm vi 1000 đối tượng.

Nếu bạn nhấn 1001, bạn nhận được 1000 trả lại, sau đó là lỗi, vì vậy tôi có thể thấy trường hợp này xảy ra.

Đếm số lượng đối tượng bạn nhận được trong thử nghiệm và betcha bạn đánh bại 1000 và sau đó không thành công.

6

NamingEnumeration thực hiện một số dọn dẹp khi gọi hasMoreElements() lần cuối cùng. Nó cũng kiểm tra nếu có giới thiệu bổ sung là bối cảnh tài sản Context.REFERRAL được thiết lập để "làm theo". Trong một trường hợp trong phần mềm của chúng tôi, điều này đã gây ra chính xác hành vi như được mô tả: Cuộc gọi cuối cùng tới hasMoreElements() (hoặc đến hasMore() hoặc gọi số next() thường xuyên hơn mức được cho phép) gây ra tới 40 giây khi giới thiệu được tìm kiếm trong ngữ cảnh LDAP. Giải pháp không được đặt là Context.REFERRAL để "theo dõi".

+0

đã làm việc cho tôi bằng cách xóa 'setReferral (" follow ")' – manikanta