Я новичок в игре framework и Java8. Я пытаюсь написать простую веб-службу в Play, которая соответствует модели Asynch и позволяет быстро возвращать вызов веб-службы, оставляя тяжелую работу для асинхронного потока.
У меня очень простая операция
public CompletionStage<Result> getPeople() {
}
Реальная обработка вызова должна загружать данные о лицах из базы данных. Метод БД
List<People> people = dbService.getPeople();
return ok(Json.tojson(people));
Сам dbMethod является асинхронным и возвращает CompletionStage>.
CompletionStage<List<People>> getPeople() {}
Итак, моя проблема в том, что я не понимаю, как лучше всего запрограммировать веб-службу, чтобы метод не блокировался.
Я могу сделать что-то подобное в своем обработчике
public CompletionStage<Result> getPeople() {
CompletableFuture.completedFuture(
ok(Json.toJson(dbservice.getPeople().get())));
}
Проблема заключается в том, что контроллер блокирует метод «get», а также выдает исключение, с которым я не знаю, как обращаться, кроме как с использованием стандартного блока try-catch (что также делает его неасинхронным).
Я также пробовал что-то вроде этого
return CompletableFuture.supplyAsync(() -> {
return dbService.getPeople();
}).thenApply(i -> { ok(Json.toJson(i.get())); } );
Но это дает ошибки компиляции.
Я буду очень признателен за помощь здесь; поскольку я очень новичок в асинхронном программировании на Java, и, несмотря на то, что я прочитал много руководств, я не понимаю, как лучше всего их использовать.
Спасибо вам всем.
supplyAsync
? - person Anton   schedule 24.04.2016