Кажется, что синхронное выполнение Hibernate Search использует другие потоки, чем вызывающий поток для параллельного выполнения.Hibernate Поиск синхронного исполнения в основном потоке
Как выполнить выполнение поиска Hibernate последовательно в вызывающем потоке?
Проблема, кажется, в org.hibernate.search.backend.impl.lucene.QueueProcessors
классе:
private void runAllWaiting() throws InterruptedException {
List<Future<Object>> futures = new ArrayList<Future<Object>>(dpProcessors.size());
// execute all work in parallel on each DirectoryProvider;
// each DP has it's own ExecutorService.
for (PerDPQueueProcessor process : dpProcessors.values()) {
ExecutorService executor = process.getOwningExecutor();
//wrap each Runnable in a Future
FutureTask<Object> f = new FutureTask<Object>(process, null);
futures.add(f);
executor.execute(f);
}
// and then wait for all tasks to be finished:
for (Future<Object> f : futures) {
if (!f.isDone()) {
try {
f.get();
}
catch (CancellationException ignore) {
// ignored, as in java.util.concurrent.AbstractExecutorService.invokeAll(Collection<Callable<T>>
// tasks)
}
catch (ExecutionException error) {
// rethrow cause to serviced thread - this could hide more exception:
Throwable cause = error.getCause();
throw new SearchException(cause);
}
}
}
}
Последовательное синхронное исполнение будет происходить в вызывающем потоке и подвергнет контекстную информацию, такие как информация аутентификации к основному DirectoryProvider.