Я пытаюсь реализовать функцию, которая будет возвращать запись по DN в асинхронном режиме. Итак, мой код:
Код: Выделить всё
val searchRequest = SearchRequest(
EmptyAsyncListener(),
dn,
SearchScope.BASE,
DereferencePolicy.NEVER,
1,
0,
false,
Filter.createPresenceFilter("objectClass"),
*attributes,
)
val asyncRequestId = getConnection().asyncSearch(searchRequest)
val ldapResult = asyncRequestId.get()
В конце концов мне удалось реализовать рабочий пример с использованием параллельного примитивы из java.util.concurrent:
Код: Выделить всё
val latch = CountDownLatch(1)
val ref = AtomicReference()
val searchRequest = SearchRequest(
SimpleAsyncListener(latch, ref),
dn,
SearchScope.BASE,
DereferencePolicy.NEVER,
1,
0,
false,
Filter.createPresenceFilter("objectClass"),
*attributes,
)
getConnection().asyncSearch(searchRequest)
latch.await()
val entry = ref.get()
Код: Выделить всё
class SimpleAsyncListener(private val latch: CountDownLatch, private val ref: AtomicReference) :
AsyncSearchResultListener {
override fun searchEntryReturned(@NotNull searchEntry: SearchResultEntry) {
ref.set(searchEntry)
latch.countDown()
}
override fun searchReferenceReturned(
@NotNull searchReference: SearchResultReference
) {
// No implementation required.
}
override fun searchResultReceived(
@NotNull requestID: AsyncRequestID,
@NotNull searchResult: SearchResult
) {
}
}
P.S. Пример искусственный, просто для изучения асинхронного API
Подробнее здесь: https://stackoverflow.com/questions/792 ... d-ldap-sdk
Мобильная версия