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