2

我对 Transactions 和 HornetQ 原生 API 有一个基本的疑问。

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

使用 JMS API 我想这很明显,因为 Spring 将 JMS 资源视为事务性资源。

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

非常感谢!

4

2 回答 2

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 上完成的。如果有任何东西不起作用,它可以(并且应该)在弹簧集成模块上修复或改进。

于 2011-10-04T18:38:13.410 回答
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(...)
}

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

于 2011-10-11T01:00:19.277 回答