Java EE Отправить форму и оставить работающий фоновый процесс? - PullRequest
3 голосов
/ 29 июля 2010

Мне нужно создать отчет с использованием java (экспорт данных из oracle), который может занять несколько минут в зависимости от количества задействованных данных, поэтому при отправке моей формы экран останавливается до конца.

Какя могу сгенерировать отчет в фоновом режиме, чтобы пользователь мог продолжить просмотр?

JMS?Как я могу сделать это с JMS?(Любой пример или объяснение приветствуется)

Есть ли другой способ?Что будет лучшим вариантом в соответствии со спецификацией Java EE?

1 Ответ

1 голос
/ 29 июля 2010

Да, JMS может быть вариантом.Вы просто отправляете сообщение в очередь, и компонент, управляемый сообщениями - особый тип EJB - затем получает и обрабатывает сообщение.Сообщение действует в этом случае как команда.Вы можете использовать JMS без Message Driven Bean, но это немного сложнее.

Если вы находитесь в среде EJB 3.1, вы можете попробовать асинхронный EJB .

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

Использование асинхронных заданий поверхностноэто очень просто, но для производства вам нужно подумать о том, как управлять ошибками, отслеживать ход выполнения, повторять неудачные задания, следить за тем, чтобы ни одно и то же задание не выполнялось одновременно и т. д. У каждого подхода есть свои сильные и слабые стороны.Обратите также внимание на стратегию, необходимую для транзакций (JMS работает, я не знаю точно, для асинхронного EJB 3.1. И пользовательская нить и таблица базы данных могут быть обработаны, если все правильно сделать с транзакцией JDBC или UserTransaction).

Надеюсь, это поможет.

...