2010-07-29 2 views
3

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

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

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

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

ответ

1

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

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

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

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

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

+0

Эй, спасибо за ответ, и извините за мой поздний ответ, я попробую это. , но есть ли все-таки проконсультироваться с состоянием асинхронного процесса ? – ErVeY