2017-01-11 6 views
0

Я использую unboundid-ldapsdk-3.1.1 и пытаюсь выполнить итерацию с помощью SimplePagedResultsControl.Поиск с помощью выгружаемых контрольных бросков LDAPSearchException

Вот фрагмент кода, который я использую:

... 
    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()); 
     } 
    } 

я получаю сообщение об ошибке, когда общее число записей составляет 100 и 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. возвращают подключение к бассейну

 Смежные вопросы

  • Нет связанных вопросов^_^