2017-01-11 8 views
0

나는 unboundid-ldapsdk-3.1.1을 사용 중이며 SimplePagedResultsControl을 사용하여 항목을 반복하려고합니다. 여기 페이징 된 컨트롤을 사용한 검색 LDAPSearchException

은 내가 사용 조각이다 : 나는 전체 항목이 100 일 때, 오류가 계속

... 
    searchRequest = new SearchRequest(dn, scope.getLdapSearchScope(), filter);  
    ASN1OctetString resumeCookie = null; 
    while (true) 
    { 
     searchRequest.setControls(new Control[] { new SimplePagedResultsControl(searchLimit, resumeCookie) }); 
     setControls(searchRequest, controls); 
     searchResult = getConnectionPool().search(searchRequest); 
     numSearches++; 
     totalEntriesReturned += searchResult.getEntryCount(); 
     for (SearchResultEntry e : searchResult.getSearchEntries()) { 
      // Do something with each entry... 
     } 
     LDAPTestUtils.assertHasControl(searchResult, SimplePagedResultsControl.PAGED_RESULTS_OID); 
     try { 
      SimplePagedResultsControl responseControl = SimplePagedResultsControl.get(searchResult); 
      if (responseControl.moreResultsToReturn()) 
       resumeCookie = responseControl.getCookie(); 
      else 
       break; 
     } catch (LDAPException ex) { 
      log.error("Error while accessing cookies" + ex.getMessage()); 
     } 
    } 

및 searchLimit는 100 : 첫 번째 반복에서 responseControl.moreResultsToReturn() 반환 true

을하고, 두 번째에서 반복 getConnectionPool().search(searchRequest);이 던졌습니다. LDAPSearchException(resultCode=2 (protocol error), numEntries=0, numReferences=0, errorMessage='paged results cookie is invalid')

내 코드에 문제가있을 수 있습니까?

+0

풀에 대한 연결 후속 요청에서 풀과 다른 연결을 사용합니다. –

+0

실제로 문제는 두 번째 반복에서 다른 연결이 사용되었다는 것입니다. 해답으로 게시 해주세요. 감사 드리겠습니다. 감사합니다. – eparvan

답변

1

일반적으로 연결 풀에는 여러 개의 연결이 있으며 초기 페이징 된 검색 결과 요청이 발급 된 곳과 동일한 연결을 반환하지 않을 수 있습니다. 이 솔루션은

  1. 풀에서 연결을 얻기 위해,이 연결을 사용하여 결과를 통해
  2. 페이지,
  3. 반환 나는 당신이 될 수 있다는 것이다 의심