В Java EE существует три основных механизма работы с асинхронностью:
- JMS
- Шина событий CDI
- @ Асинхронные аннотированные методы сессионных компонентов без сохранения состояния
ewernli уже дает очень хорошее объяснение преимуществ JMS. Это очень полнофункциональная система, но все эти функции стоят немного накладных расходов и сложности, например. управление задействованными административными объектами.
Кроме того, спецификация JMS не обновлялась почти десять лет. Это все еще очень полезно, показывает большую дальновидность, заложенную в дизайн API, но иногда это может показаться немного загадочным. То, как должны быть определены административные объекты, такие как места назначения, способ получения соединения, создания сеанса и т. Д., Все это выглядит немного низкоуровневым, старым и загадочным. Прием сообщений хотя и был значительно упрощен с помощью бинов, управляемых сообщениями, но отправка - нет.
Затем, по какой-то странной причине, веб-модулям запрещено прослушивать места назначения JMS. Конечно, для этого больше нет смысла, но это в древних спецификациях J2EE 1.3 и более поздних. Совместимые серверы приложений по-прежнему поддерживают это правило, но все они предоставляют конкретную конфигурацию поставщика, чтобы разрешить его в любом случае. Это, однако, делает ваше приложение менее переносимым.
Подмножество сценариев использования, для которых JMS исторически использовался, представляет собой очень простое программирование на основе событий в одном приложении. Для этого, возможно, лучше подходит шина событий CDI, так как это более простой, более современный и в целом более легкий подход к весу.
Другое подмножество сценариев использования, для которых использовался JMS, просто выполняет любую работу асинхронно. Для этого люди иногда использовали для создания MDB, который затем просто разворачивал бы параметры из сообщения и вызывал метод некоего состояния сессионного компонента, напрямую передавая эти параметры. В этом случае парадигма обмена сообщениями абсолютно не нужна, и простой вызов @Asynchronous аннотированного метода является более простым и более прямым подходом.