目前,我有一个spring JMS listener
侦听EMS topic
,并在获得消息时处理它并持久保存它。但是,我想在一次交易中完成所有这些。我知道这需要XA
,因为有两个全局资源必须与Transaction Manager
注册。这可以通过spring提供的JTA
实现。但是,由于我的应用程序是独立的,我是否需要包括第三方JTA standalone
实现,如Bitronix
或JOTM
。我问这个问题是因为它们都是spring资源,默认的JTA
应该处理这个。
是的,您将需要包含一个支持XA的第三方TransactionManager实现。
大多数应用服务器,例如JBoss,都会捆绑他们选择的XA TransactionManager。这是选择ApplicationServer而不是Tomcat或独立应用程序的原因之一;XA事务之类的配置基本上已经为您完成了。
有时候ApplicationServer太重量级了(尽管我认为这不是一个问题),或者你不能使用它。在这个场景中,如果您想要使用XA,那么您有责任提供TransactionManager实现。
你可以从JBossTS, Atomikos Transaction Essentials或Bitronix JTA等实现中选择。
Spring确实包含了一个JTATransactionManager实现。如果您在ApplicationServer中运行,这将使用预配置的位置来检测所选的XA实现,或者如果您在独立环境中运行,则需要自己配置它。有一些关于用Spring配置XA TransactionManager的优秀资源:
- http://spring.io/blog/2011/08/15/configuring-spring-and-jta-without-full-java-ee/
- http://www.javaworld.com/article/2077714/java-web-development/xa-transactions-using-spring.html