Калитка: как справляться с длительными задачами
Я настроил веб-приложение Wicket + Hibernate + Spring, которое включает сбор некоторых данных (создание и возврат некоторых файлов), сохранение их в базе данных, создание некоторых изображений и отображение всего этого на веб-странице.
Это все работает хорошо для коротких запусков, но иногда сбор данных (который включает некоторое удаленное перехват номера) занимает слишком много времени (более 20 минут) и время ожидания. Я пытался решить эту проблему, используя два подхода, но оба они показывают некоторые проблемы.
Первый подход был с использованиемAjaxLazyLoadPanelи просто делать все внутри getLazyLoadComponent. Это работало нормально для коротких запусков, но для более чем 20-минутных запусков LazyLoadComponents не будет загружаться (хороший оксюморон там) из-за тайм-аутов.
Второй подход заключался в создании промежуточного фрагмента с добавленнымAjaxSelfUpdatingTimerBehavior с длительностью, установленной на 10 секунд, которые опрашиваются для файлов, которые создаются при обработке номера. Похоже, что из-за этого задачи выполняются в фоновом режиме без проблем, но происходит сбой, когда возвращаемые данные необходимо сохранить в базе данных. Я использую шаблон Open Session in View, но, возможно, это не удается при попытке сохранить данные через 20 минут ?? (Решение может заключаться в решении этого ..).
Из-за вышеупомянутых проблем я сейчас читаю альтернативные подходы для решения этих длительных задач и натолкнулся на:
org.apache.wicket.util.time.Taskorg.apache.wicket.util.watch.ModificationWatcherТеперь мне интересно, может ли какой-либо из них лучше подойти для решения проблем с тайм-аутом, которые возникают у меня при выполнении задач и хранении данных в базе данных впоследствии, или же у кого-нибудь есть какие-либо другие решения, которые могут помочь в этом ситуация.
Я действительно хотел бы знать, жизнеспособен ли новый подход, прежде чем я потрачу еще один день на реализацию чего-то, что в итоге может не сработать.
С наилучшими пожеланиями,
Тим