Да, JMS может быть вариантом. Вы просто отправляете сообщение в очередь, а Message Driven Bean - специальный вид EJB - будет получать и обрабатывать сообщение. Сообщение действует в этом случае как команда. Однако вы можете использовать JMS без Message Driven Bean, но это немного сложнее.
Если вы находитесь в среде EJB 3.1, вы можете попробовать asynchronous EJB.
В противном случае, если это не рекомендуется спецификацией, вы можете запустить нить в веб-контейнере. Либо вы начинаете один поток на одно задание, либо можете запустить/остановить один фоновый поток в ServletContextListener
, который обрабатывает команды, которые вы храните, скажем, в таблице в базе данных.
Использование асинхронных заданий поверхностно очень просто, но для производства вам нужно будет подумать о том, как управлять ошибкой, отслеживать прогресс, повторять неудачную работу, гарантировать, что одновременно не запускается одна и та же работа и т. Д. Каждый подход имеет свою силу и слабость. Обратите внимание также на стратегию, необходимую для транзакций (JMS транслируется, я точно не знаю, для async EJB 3.1., И пользовательская таблица нитей и базы данных может быть выполнена, если делать что-то правильно с транзакцией JDBC или UserTransaction
).
Надеюсь, это поможет.
Эй, спасибо за ответ, и извините за мой поздний ответ, я попробую это. , но есть ли все-таки проконсультироваться с состоянием асинхронного процесса ? – ErVeY