我应该使用HornetQ JMS API与Spring TransactionManager集成吗?

时间:2011-10-03 22:44:34

标签: spring transactions jms hornetq

我对交易和HornetQ原生API有基本疑问。

如果我的应用程序是基于Spring的,使用Spring托管事务,我应该如何配置HornetQ参与Spring(AOP)管理的同一事务?

使用JMS API我猜这很明显,因为Spring认为JMS资源是事务性的。

但我不知道如何正确使用nativa API。有人可以解释这个问题吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

HornetQ在核心API上支持XA,它们只是资源。

如果仅使用常规XA API,您应该可以在Spring上登记这些资源。

http://docs.jboss.org/hornetq/2.2.5.Final/api/org/hornetq/api/core/client/ClientSession.html

我不确定如何在Spring上完成整合。如果有任何不起作用,它可以(并且应该)在弹簧集成模块上进行修复或改进。

答案 1 :(得分:1)

不确定我是否理解正确,但是如果您只是想使用Spring和JUST JMS的@Transactional注释进行声明式事务管理,那么只需使用< tx:annotation-driven transaction-manager =“myTransactionManager “/>然后 - 对于“myTranactionManager”,注册一个JmsTransactionManager类型的bean,例如,

@Bean public PlatformTransactionManager myTranactionManager (){ 
  return new JmsTransactionManager( this.connectionFactory());
} 

现在,您可以正常使用注释,JMS交互将包含在事务中

@Transactional
public void doSomethingWithJms(){ 
  jmsTemplate.send(...);
  jmsTemplate.convertAndSend(...)
}

如果您的目标是使用MULTIPLE资源,例如JMS JDBC,那么您需要使用JTA。要了解如何设置JTA(对于JPA JMS),请查看此博客文章http://blog.springsource.com/2011/08/15/configuring-spring-and-jta-without-full-java-ee/