Я использую Apache Cayenne с Vertx. Vertx полагается на асинхронность всего и активно ищет потоки, которые блокируют.
Так что исполняем что-то вроде ...
List<Artist> artists = ObjectSelect.query(Artist.class).select(context);
... приведет к тому, что Vertx будет жаловаться на следующее:
WARNING: Thread Thread[vert.x-eventloop-thread-0,5,main] has been blocked for 4750 ms, time limit is 2000
Обратите внимание, что на самом деле есть способы обойти это, заключив код в функцию executeBlocking
следующим образом:
// Turning synchronous code to async in Vertx
vertx.executeBlocking<Any>({ future ->
List<Artist> artists = ObjectSelect.query(Artist.class).select(context)
future.complete(artists)
}, { res ->
// The result
})
Однако становится больно продолжать так оборачивать мои функции ORM.
Интересно, есть ли флаг или переключатель для включения асинхронного режима Cayenne? Или, если такого флага нет, мне интересно, есть ли способ использовать Async Driver Postgres от Маурисио. Я выбрал именно этот асинхронный драйвер, потому что Vertx обеспечивает для него встроенную поддержку .