Калитка: как справиться с длительными задачами

Я имею, устанавливают Калитку +, в спящем режиме + веб-приложение Spring, которое включает сбор некоторых данных (имеющий некоторые файлы, сгенерированные и возвращенные), храня это в базе данных, создавая некоторые изображения и отображая все это на веб-странице.

Это все хорошо работает для коротких промежутков времени, но иногда сбор данных (который включает некоторое удаленное перемалывание чисел) занимает слишком много времени (20 + минуты) и испытывает таймаут. Я попытался разрешить это использование двух подходов, но они оба показывают некоторые проблемы.

Первый подход использовал AjaxLazyLoadPanels и просто делал все в getLazyLoadComponent. Это хорошо работало для коротких промежутков времени, но для 20 + работает минута, LazyLoadComponents не загрузился бы (хороший оксюморон там) из-за тайм-аутов.

Второй подход связал создание промежуточного Фрагмента с добавленным AjaxSelfUpdatingTimerBehavior с набором продолжительности к 10 секундам, это опросило относительно файлов, которые создаются в перемалывании чисел. Это, кажется, делает задачи выполненными в фоновом режиме без проблем, но сбои, когда возвращенные данные должны храниться в базе данных. Я использую Открытое заседание в поле зрения шаблон, но возможно это перестало работать при попытке хранить данные после 20 минут?? (Решение могло лечь в разрешении этого..).

Из-за вышеупомянутых проблем я теперь читаю на альтернативных подходах для справлений с этими длительными задачами и столкнулся:

Я теперь задаюсь вопросом, мог ли или их лучше подходить решать проблемы тайм-аута, я имею и в выполнении задач и в хранить данные в базе данных впоследствии, или если у любого есть любые другие решения, которые могли бы помочь в этой ситуации.

Я действительно хотел бы знать, жизнеспособен ли новый подход, прежде чем я проведу другой день, реализовывая что-то, что, могло бы оказаться, не работало бы, в конце концов.

С уважением,
Tim

6
задан Zeemee 14 March 2019 в 14:28
поделиться

1 ответ

Я знаю, что мы успешно использовали панель с подключенным AjaxSelfUpdatingTimerBehavior. Задача и часть результатов отделены от логики представления, но доступны для представления через созданную вами службу. Реализация сервиса, которую мы использовали, отвечает за запуск TheadPool или ExectutorService для выполнения отдельных задач. Сервис может обеспечить способ мониторинга прогресса/статуса конкретного задания/вызова, который выполняется. По завершении он также должен сделать данные доступными для просмотра. Инъекции SessionFactory в реализацию сервиса (или инжектированного DAO) должно быть достаточно для создания HibernateSession вне WebSession.

3
ответ дан 17 December 2019 в 18:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: