我对交易和HornetQ原生API有基本疑问。
如果我的应用程序是基于Spring的,使用Spring托管事务,我应该如何配置HornetQ参与Spring(AOP)管理的同一事务?
使用JMS API我猜这很明显,因为Spring认为JMS资源是事务性的。
但我不知道如何正确使用nativa API。有人可以解释这个问题吗?
非常感谢!
答案 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/