我对 Transactions 和 HornetQ 原生 API 有一个基本的疑问。
如果我的应用程序是基于 Spring 的,使用 Spring 管理的事务,我应该如何配置 HornetQ 以参与由 Spring (AOP) 管理的同一事务?
使用 JMS API 我想这很明显,因为 Spring 将 JMS 资源视为事务性资源。
但我不知道如何正确使用 nativa API。有人可以阐明这个问题吗?
非常感谢!
我对 Transactions 和 HornetQ 原生 API 有一个基本的疑问。
如果我的应用程序是基于 Spring 的,使用 Spring 管理的事务,我应该如何配置 HornetQ 以参与由 Spring (AOP) 管理的同一事务?
使用 JMS API 我想这很明显,因为 Spring 将 JMS 资源视为事务性资源。
但我不知道如何正确使用 nativa API。有人可以阐明这个问题吗?
非常感谢!
HornetQ 在核心 API 上支持 XA,它们只是资源。
如果只是使用常规 XA API,您应该能够在 Spring 上获取这些资源。
http://docs.jboss.org/hornetq/2.2.5.Final/api/org/hornetq/api/core/client/ClientSession.html
我不确定这种集成是如何在 Spring 上完成的。如果有任何东西不起作用,它可以(并且应该)在弹簧集成模块上修复或改进。
不确定我是否理解正确,但如果您只是尝试使用 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(...)
}
如果您的目标是使用多种资源,例如 JMS和JDBC,那么您需要使用 JTA。要了解如何设置 JTA(用于 JPA和JMS),请查看此博客文章http://blog.springsource.com/2011/08/15/configuring-spring-and-jta-without-full-java-ee/