На всякий случай опишу текущую ситуацию:
Есть web сервер, сделанный из Tomcat+Tapestry+Hibernate+Postgresql+еще
всякое до кучи.
И вот приходит пользователь и говорит: отдай мне страничку.
А чтобы страничку нарисовать, надо слазить за данными в postgres и еще другие удаленные места.
Допустим, для страницы нужны данные d1, d2, d3 из внешних источников s1, s2, s3 (один из которых postgres)
Как это выглядит с точки зрения потоков:
Для обработки пользовательского запроса tomcat достает из пула рабочий поток и говорит ему: нарисуй html. Рабочий поток последовательными блокирующими запросами лезет за данными в s1, s2, s3 и рисует html.
Итого получается, что общая задержка на извлечение данных суммируется: t1+t2+t3.
Хочется запросить данные параллельно неблокирующими запросами. То есть сказать что то типа: источник, вот тебе запрос на эти данные. Но ты пожалуйста мой поток не блокируй и верни сразу же управление. А когда данные приедут, кинь мне какой-нибудь event или дерни мой callback.
Тогда бы я одновременно сделал запросы в s1, s2, s3 и спокойно ждал, пока они все не приедут. Задержка бы получилась не сумма, а max( t1, t2, t3)
С прочими внешними источниками так договориться можно, а вот можно ли так договориться с Hibernate?
Ну или если Hibernate так не умеет, может есть что-то аналогичное, что умеет?