Spring独立JMS+JDBC单事务



目前,我有一个spring JMS listener侦听EMS topic,并在获得消息时处理它并持久保存它。但是,我想在一次交易中完成所有这些。我知道这需要XA,因为有两个全局资源必须与Transaction Manager注册。这可以通过spring提供的JTA实现。但是,由于我的应用程序是独立的,我是否需要包括第三方JTA standalone实现,如BitronixJOTM。我问这个问题是因为它们都是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的优秀资源:

  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

最新更新