У нас есть то, что мы считаем, что это довольно распространенное использование XA случае ошибки:EJBs, XA сделки и обработки
- прочитал сообщение от в-очереди
- запись данных в базу данных
- записи ответное сообщение в очередь (отличное от очереди)
Однако нам также нужен способ обработки внутренних ошибок и ядовитых сообщений. Поток управления мы имеем в виду что-то вроде этого:
- прочитал сообщение от в-очереди
- записи в базу данных
- если есть исключения откат транзакции базы данных
- если не существует исключения, запустите commit phase1 в базе данных
- если все прошло нормально (нет отката и фиксации фазы 1 нормально), напишите сообщение об успешном завершении в очередь
- Если произошла сбой фазы фиксации 1 в базе данных или возникло исключение, а транзакция базы данных была откатна, напишите сообщение об ошибке в очередь
- : в очереди, в очереди и в базе данных (за исключением отката из-за исключения)
Это хороший подход, должны ли мы делать это по-другому? Как мы можем это сделать с EJB?
Мы используем EJB 3.1 на JBoss AS 7.2/EAP 6.1, кодирование против Narayana напрямую является вариантом. Драйвер JDBC - ojdbc7-12.1.0.1, а JMS RAR - серия MQ (не знаю версию).
Это радикально изменит протокол XA, не так ли? И я уверен, что вы не сможете этого сделать. Почему бы вам просто не настроить JMS-провайдера, чтобы позволить слушателю сообщения потреблять сообщение N раз и отправлять сообщение в очередь ошибок, если все попытки N потерпели неудачу? –
Я рассматриваю как разновидность вложенной транзакции. Да, я знаю, что JTA не поддерживает вложенные транзакции, но это крайний случай, когда самому ресурсу не нужно поддерживать вложенные транзакции, а только менеджер транзакций (Narayana AFAIK делает). –
Ум, как бы вы зафиксировали базу данных как на шаге 2, так и на шаге 5?что будет для шага 5? Не могли бы вы просто использовать стандартную распределенную транзакцию, чтобы все было совершено на шаге 5, и если какой-либо из них терпит неудачу, весь процесс откатывается и вы отправляете сообщение об ошибке в очередь? – eis