Играть! рекламирует его функцию асинхронной обработки HTTP, хотя мне не очень понятно, что еще является действительно асинхронным (неблокирующим и без переключения потоков.) В асинхронных примерах, которые я читаю, нижеприведенный взят из Play! Framework Cookbook:
public static void generateInvoice(Long orderId) {
Order order = Order.findById(orderId); // #a
InputStream is = await(new OrderAsPdfJob(order).now()); // #b
renderBinary(is);
}
Они фокусируются на длинном / дорогом шаге "бизнес-логики" на #b, но меня беспокоит вызов БД на #a. Фактически, большинство методов контроллера во многих приложениях просто пытаются сделать несколько CRUD для БД, например:
public static void generateInvoice(Long orderId) {
Order order = Order.findById(orderId); // #a
render(order);
}
Меня особенно беспокоит утверждение об использовании «небольшого количества потоков» при обслуживании этого шаблона доступа к БД.
Итак, вопросы
- Буду играть! будет блокировать вызовы JDBC?
- Если мы завершим такие вызовы в будущем / обещание / ожидание, это вызовет переключение потоков (помимо неудобств из-за распространенности вызовов БД), верно?
- В свете этого как его асинхронизм сравнивается с сервлет-сервером с разъемом NIO (например, Tomcat + разъем NIO, но без использования нового обработчика событий) при обслуживании этого шаблона доступа к БД?
- Планируется ли поддержка драйвера асинхронной БД, например http://code.google.com/p/adbcj/?