Ответ 1
Из спецификации JMS 1.1...
4.5.2 Асинхронная доставка
Клиент может зарегистрировать объект, который реализует интерфейс JMS MessageListener с MessageConsumer. Когда сообщения поступают для потребителя, поставщик предоставляет их, вызывая метод listeners onMessage.
Возможно, что слушатель может вызвать исключение RuntimeException; однако это считается ошибкой программирования клиента. Хорошие слушатели должны улавливать такие исключения и пытаться переадресовать сообщения, вызывая их в какой-то форме "необработанного назначения сообщения" для конкретного приложения.
Результат прослушивателя, бросающего исключение RuntimeException, зависит от режима подтверждения сеансов.
- AUTO_ACKNOWLEDGE или DUPS_OK_ACKNOWLEDGE - сообщение будет немедленно переадресован. количество провайдеров JMS повторите то же сообщение перед отказ от провайдера. Поле заголовка сообщения JMSRedelivered будет установлено сообщение в этих условиях.
- CLIENT_ACKNOWLEDGE - следующее сообщение для слушателя. Если клиент хочет иметь предыдущий неподтвержденное сообщение redelivered, он должен вручную восстановить сеанс.
- Transacted Session - следующее сообщение для слушателя. клиент может либо совершать, либо откатывать назад сессии (другими словами, Ошибка RuntimeException автоматически откат сеанса).
Поставщики JMS должны помечать клиентов с прослушивающими сообщениями, которые бросают RuntimeExceptions, возможно, не работает.