Весь день пердолился с Wicket. Постанова: есть отчеты в SQL, которые могут формироваться по полдня. Оптимизировать бесполезно (да я и не умею в этот ваш SQL).
А Wicket не умеет работать ни с долгоживущими процессами, ни с асинхронными обновлениями со стороны сервера. Причем, там так всё от души прибито гвоздями в Викете, что фиг оторвешь. Если просто запустить долгоживущий SQL запрос прямо в...
... контроллере викета — весь веб‑интерфейс виснет намертво.
Пришлось написать что‑то типа Task Manager в шиндовс. Каждый отдельный запрос кидается в Квазар (в наидефолтнейшей конфигурации), а внутри файбера уже выполняется SQL‑запрос через JdbcTemplate. Как только файбер что‑то посчитал — результат кладется в гуавовский кэш. А викет потом с помощью AbstractAjaxTimerBehavior постоянно мучает сервер и смотрит, появилось ли чего в кэше. В кэш также кладется JDBC Statement, чтобы даже если никакого результата еще нет, пользователь мог оборвать запрос.
Квазар подключается через добавление агента в томкате. Документация по процессу подключения там какая‑то переусложненная, на деле достаточно кинуть в lib томката три джарки: comsat‑tomcat‑loader‑7.0.jar, guava‑19.0.jar и junit‑4.12.jar, и потом в context.xml прописать одну строчку:
Интересно, что начиная со Spring 4 класс SimpleJdbcTemplate дропнули (перед этим на протяжении Spring 3 он был deprecated). Но новый класс JdbcTemplate не умеет в состояние, соответственно я не могу оборвать слишком долгий SQL запрос посередине! Пришлось пойти вручную напердолить аналог удаленного SimpleJdbcTemplate. Спрашивается, зачем было удалять? Длинных SQL запросов больше не существует, 640 килобайт хватит всем?