是否可以在JTA(Atomikos)中设置并行事务
我有两个事务资源:数据库和消息队列。所以我使用 Atomikos 作为 XA 事务管理器。
在交易(tx1)内,是否可以并行打开另一个单独的交易(tx2)?
在tx2中,它会将一些数据提交到db中,即使tx1最终也可能失败并回滚。
并且 tx2 必须在 tx1 内部完成,就好像 tx2 中发生错误一样,也应该回滚 tx1。
有人知道我怎样才能实现这一目标吗?
谢谢。
I have two transactional resources, database and message queue. So I use Atomikos as the XA transaction manager.
Inside a transaction (tx1), is it possible to open another separated transaction (tx2) in parallel?
In tx2, it will commit some data into db, even the tx1 might be failed and roll backed eventually.
And tx2 must be done inside tx1, as if error occurred in tx2 should roll back the tx1 also.
Anyone knows how I can achieve this?
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,您可以实现这一目标。你谈论所谓的“嵌套”交易
首先,对于 Atomikis,您必须指定属性 com.atomikos.icatch.serial_jta_transactions=false
如果您直接使用 TransactionManager 进行操作,则必须在开始 tx2 之前暂停 tx1 (TransactionManager.suspend())。提交事务 tx2 后,您必须恢复 tx1。如果执行 tx2 时出现错误,您必须回滚 tx2、恢复 tx1 并回滚 tx1:
示例
Yes, you can achive this. You talk about so named "nested" transaction
First of all for Atomikis you must specify property com.atomikos.icatch.serial_jta_transactions=false
If you operate with TransactionManager directly you have to suspend tx1 before begining tx2 (TransactionManager.suspend()). After commiting transaction tx2 you have to resume tx1. And if there is an error while execution tx2 you must do rollback tx2, resume tx1 and rollback tx1:
Example