小编典典

如何在多线程之间共享一个事务

java

我们遇到了适用于多线程的方案。

在主线程中,执行一些逻辑操作并更新数据库,在某种程度上,它将调用另一个服务来更新数据库,该服务在另一个线程中运行。

我们希望两个线程共享同一个事务,这意味着任何一个线程中的任何一个操作都将失败,那么另一个线程中的该操作也将被回滚。

但是工作了几天,我发现一些帖子说JTA不支持多线程。当前我们使用Bitronix作为JTA提供者,有没有人知道Bitronix是否在一个Transaction中支持多线程?还是有其他JTA提供程序支持此功能(独立的JTA提供程序而不是J2EE容器)?


阅读 2001

收藏
2020-11-16

共1个答案

小编典典

“多个线程可以同时与同一全局事务关联。” -JTA规范v1.1,第3.2节,第13页。

JBossTS会解决这个问题。除了检查交易行为,困难实际上不是交易经理。您还需要正确处理与资源管理器即数据库的连接。如果在线程之间共享一个连接,则串行运行不一定会加速,因为除非驱动程序支持有效的多路复用,否则这是一个潜在的瓶颈。另一方面,如果使用多个连接,则需要确保驱动程序明智地实现isSameRM以避免2PC,并且如果线程需要查看彼此对数据库的未提交更改,则还应允许事务分支锁共享(紧密耦合)。因此,除了一个好的事务管理器之外,您还需要一个好的连接管理器,例如JCA实现和一个好的数据库驱动程序。

2020-11-16