我们遇到了一个适用于多线程的场景。
在主线程中,做一些逻辑并更新数据库,在某一点上,它将调用另一个服务来更新数据库,该数据库在另一个线程中运行。
我们希望两个线程共享相同的事务,这意味着,任一线程中的任一操作都失败,那么另一个线程中的操作也将被回滚。
但是工作了几天,我发现一些帖子说JTA不支持多线程。 目前我们使用Bitronix作为JTA提供程序,有没有人知道Bitronix是否支持一个Transaction中的多线程?或者是否有任何其他JTA提供程序支持此(独立JTA提供程序而非J2EE容器)?
答案 0 :(得分:9)
“多个线程可能同时与同一个全局事务关联。” - JTA规范v1.1,第3.2节,第13页。
JBossTS将处理没问题。除了检查交易行为之外,困难实际上并不是事务管理器。您还需要正确处理与资源管理器(即数据库)的连接。如果您在线程之间共享一个连接,则不一定会以串行方式运行任何加速,因为除非驱动程序支持高效多路复用,否则它可能是瓶颈。另一方面,如果您使用多个连接,则需要确保驱动程序能够合理地实现isSameRM以避免2PC,并且如果线程需要查看彼此对数据库的未提交更改,则还允许事务分支锁共享(紧密耦合)。所以除了一个好的事务管理器之外,你还需要一个好的连接管理器,例如JCA实现和良好的数据库驱动程序。祝你好运。