【发布时间】:2012-06-03 17:02:14
【问题描述】:
我正在开发一个同时使用 JMS 和 Hibernate 的独立应用程序。
如果我想跨两种资源进行事务处理,文档建议必须使用 JTA。
但是,现在使用 @Transaction 注释的 DAO 方法(和 HibernateTransactionManager),这似乎已经有效。当我在 JmsTemplate 上调用 send() 时,消息不会立即发送,而是在方法返回时通过 Hibernate 会话提交 JMS 会话。
我不知道没有 JtaTransactionManager 怎么可能,所以我检查了源代码。事实证明,Hibernate 的包装器和 JmsTemplate 都使用 TransactionSynchronizationManager 注册会话,并且 JMS 会话将在 Hibernate 会话提交时提交。
这与 JTA 事务有什么不同。我可以用它来代替后者吗??
【问题讨论】:
-
您是否检查过其中一个失败时会发生什么?它们都回滚了吗?
标签: java spring hibernate transactions jms