我正在开发一个同时使用 JMS 和 Hibernate 的独立应用程序。
如果我想跨两种资源进行交易,文档建议必须使用 JTA。
但是,现在使用 @Transaction 注释的 DAO 方法(和 HibernateTransactionManager),这似乎已经奏效了。当我在 JmsTemplate 上调用 send() 时,不会立即发送消息,而是在方法返回时将 JMS 会话与 Hibernate 会话一起提交。
我不知道没有 JtaTransactionManager 怎么可能,所以我检查了源代码。事实证明,Hibernate 的包装器和 JmsTemplate 都使用 TransactionSynchronizationManager 注册会话,并且 JMS 会话将在 Hibernate 会话提交时提交。
这和 JTA 交易有什么不同。我可以用它来代替后者吗?