如何处理涉及Spring消息/JMS和数据库的事务

如何处理涉及Spring消息/JMS和数据库的事务,spring,hibernate,transactions,spring-jms,Spring,Hibernate,Transactions,Spring Jms,我有一个获取发票的方法,它创建XML并将该XML发送到JMS队列,然后将发票保存到DB,更新状态为“invoinced”。下面是涉及Spring和Hibernate的伪代码。我的问题是:hibernate save rollsback Jms发送是否失败。或者,如果Jms发送失败,我如何回滚保存发票状态?这属于分布式事务管理。这里涉及哪些交易案例。谢谢 @Transactional(propagation=Propagation.Required) void processInvoi

我有一个获取发票的方法,它创建XML并将该XML发送到JMS队列,然后将发票保存到DB,更新状态为“invoinced”。下面是涉及Spring和Hibernate的伪代码。我的问题是:hibernate save rollsback Jms发送是否失败。或者,如果Jms发送失败,我如何回滚保存发票状态?这属于分布式事务管理。这里涉及哪些交易案例。谢谢

 @Transactional(propagation=Propagation.Required)    
 void processInvoices(invoice ){
           String xml = createXML(invoice);
           messageService.sendInvoice(xml );
           invoice.setStatus("invoiced");
           save(invoice);

  }

根据我的知识以及我从您的问题中了解到的情况,您希望同步hibernate和JMS事务,为此,您需要使用JTA跨hibernate和JMS管理事务


阅读更多内容@

谢谢您的快速回复。您提到的链接中的这条语句“当我在JmsTemplate上调用send()时,消息不会立即发送,而是在方法返回时,JMS会话与Hibernate会话一起提交。”,因为spring@transactional对我的情况适用,对吗?i、 e当我的发票保存时,只有xml会在队列中,对吗?