У меня следующая ситуация.
У меня есть веб-сайт, написанный на Tapestry. На одной из страниц мне нужно создать довольно большой документ Excel или PDF (около 20 МБ). Теперь, поскольку весь процесс требует времени, я прошу своего пользователя немного подождать.
Однако, когда я попытался проверить верхние пределы, я заметил, что все мое приложение (не только веб-часть) зависает, потому что генерация съедает все ресурсы, а остальная часть веб-сайта и приложения перестает отвечать на запросы.
Вот поток, как я делал это до сих пор.
- Пользователь нажимает кнопку, чтобы запросить файл на странице
- Данные извлекаются из базы данных (эта часть выполняется довольно быстро)
- Данные передаются в сервис Tapestry, который их подготавливает (ничего особенного, тоже быстро)
- Подготовленные данные отправляются в службу EJB, которая создает и развертывает посетителя, который создает файл excel/pdf.
InputStream
созданного файла передается в Tapestry, который оборачивает его вStreamResponse
и предлагает загрузить
Что было бы подходящим способом справиться с этой проблемой?
Могу ли я использовать Tapestry ParallelExecutor
из какого-нибудь моего сервиса Tapestry таким образом?
Future<InputStream> future = executor.invoke(new Invokable<InputStream>() { ... });
Моя главная цель — чтобы приложение и сайт продолжали работать, чтобы они не зависали.
Заранее спасибо.