Spring独立JMS + JDBC单个事务

时间:2014-06-05 08:25:28

标签: java spring spring-jms

目前我有一个spring JMS listener,它会监听EMS topic并收到一条消息来处理它并保留它。但是,我想在一次交易中完成所有这些工作。我知道这需要XA,因为有两个全局资源必须在Transaction Manager注册。这可以通过spring提供的JTA来实现。但是,由于我的应用程序是独立的,我是否需要包含第三方JTA standalone实施,例如BitronixJOTM。我问这个因为两个都是spring资源,默认JTA应该处理这个。

1 个答案:

答案 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有一些很好的资源:

  1. http://spring.io/blog/2011/08/15/configuring-spring-and-jta-without-full-java-ee/
  2. http://www.javaworld.com/article/2077714/java-web-development/xa-transactions-using-spring.html