Обработка тайм-аутов транзакции EJB для цикла - PullRequest
0 голосов
/ 12 февраля 2019

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

Что я сделал, так это разбил файлы на списки и предложил выполнить операцию другим методом, который обозначен как @ REQUIRES_NEW.

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

Я не могу рассматривать всю операцию как одну из-за проблемы тайм-аута.Ищете отзывы по этому поводу.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Проверьте, увеличивается ли время ожидания транзакции для вашего метода ejb, например, если вы используете bean-компонент без сохранения состояния, вы можете просто аннотировать

 @StatelessDeployment(transactionTimeout=10)

Другой вариант - проверить Асинхронные методы EJB

https://docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html

Асинхронные методы обычно используются для длительных операций, для задач с интенсивным использованием процессора, для фоновых задач, для увеличения пропускной способности приложений или для увеличения времени отклика приложений.После завершения процесса вы можете получить статус процесса.

0 голосов
/ 12 февраля 2019

Вы можете рассмотреть следующий подход: Когда клиент запрашивает обработку файлов (startProcessing), сервер (EJB) запускает фоновый поток (например, quartz-scheduler.org) для обработки файлов и возвращает идентификатор выполняемой операции.Если необходимо, клиент может отменить Processing, getProcessingStatus и т. Д., Используя такой идентификатор.

...