目前我有一个spring JMS listener
,它会监听EMS topic
并收到一条消息来处理它并保留它。但是,我想在一次交易中完成所有这些工作。我知道这需要XA
,因为有两个全局资源必须在Transaction Manager
注册。这可以通过spring提供的JTA
来实现。但是,由于我的应用程序是独立的,我是否需要包含第三方JTA standalone
实施,例如Bitronix
或JOTM
。我问这个因为两个都是spring资源,默认JTA
应该处理这个。
答案 0 :(得分:1)
是的,您需要包含支持XA的第三方TransactionManager实现。
大多数应用服务器,例如JBoss将捆绑他们选择的XA TransactionManager。这是选择TomServer或独立应用程序之类的ApplicationServer的原因之一;像XA事务这样的配置基本上是为你完成的。
有时候ApplicationServer太重了(虽然我觉得这个问题变得不那么重要了),或者你不能使用它。在这种情况下,如果要使用XA,则有责任提供TransactionManager实现。
您可以从以下实施中挑选:JBossTS,Atomikos Transaction Essentials或Bitronix JTA。
Spring确实包含了一个JTATransactionManager实现。如果您在ApplicationServer中运行,这将使用预先配置的位置来检测所选的XA实现,或者如果您在独立环境中,则需要自己配置它。
使用Spring配置XA TransactionManager有一些很好的资源: