В настоящее время у меня есть spring JMS listener
который прослушивает EMS topic
и получает сообщение, обрабатывая его и сохраняет его. Тем не менее, я хотел бы сделать все это в рамках одной транзакции. Я знаю, что это требует XA
поскольку есть два глобальных ресурса, которые должны зарегистрироваться в Transaction Manager
. Это может быть достигнуто благодаря JTA
который обеспечивает пружина. Однако, поскольку мое приложение является автономным, мне нужно включить стороннюю JTA standalone
реализацию, такую как Bitronix
или JOTM
. Я спрашиваю об этом, потому что, поскольку оба являются источниками ресурсов, JTA
по умолчанию должен справиться с этим.
Да, вам нужно будет включить стороннюю реализацию TransactionManager, которая поддерживает XA.
Большинство серверов приложений, например JBoss, свяжут XA TransactionManager по своему выбору. Это одна из причин выбора ApplicationServer над чем-то вроде Tomcat или отдельного приложения; конфигурация таких вещей, как транзакции XA, в основном выполняется для вас.
Иногда ApplicationServer слишком тяжеловес (хотя я думаю, что это становится проблемой), или вы не можете его использовать. В этом случае вы несете ответственность за реализацию TransactionManager, если хотите использовать XA.
Вы можете выбрать из реализаций, таких как: JBossTS, Atomicos Transaction Essentials или Bitronix JTA.
Spring включает в себя реализацию JTATransactionManager. Это будет либо использовать предварительно настроенные местоположения, чтобы обнаружить выбранную реализацию XA, если вы работаете в ApplicationServer, или, альтернативно, вам нужно настроить ее самостоятельно, если вы находитесь в автономной среде.
Есть несколько отличных ресурсов при настройке XA TransactionManager с Spring: