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