java - 全局事务可以/是​​否跨越多个线程?

标签 java transactions messaging jta

我们使用 JTA 来管理 servlet 上下文中的全局事务。此外,一些 servlet 线程正在调用异步 bean。目前,我的设计方式是让异步 bean(工作管理器)获得自己的事务。

据我了解,两个线程可以参与同一个 XA 事务。但是,如果我开始使用 servlet 创建的事务,对于异步 bean,这是否会阻塞 servlet 线程,直到所有参与者都提交或回滚? servlet 和异步 bean 都可以提交和回滚。

应用服务器是WebSphere,我们没有使用Spring。

感谢您的回复。

最佳答案

对 servlet 线程和异步工作线程使用相同的事务在某种程度上与消息传递的一般思想相冲突。消息传递是一种解耦的方式,而事务则将事物紧密地结合在一起。

换句话说,如果你想让一个worker使用同一个事务,我不会以异步方式实现worker。

对于参与同一个XA事务的两个线程,这可能不支持,查看here了解详情。即使它有效,一般来说,通过线程上下文共享资源(文件句柄、连接、事务等)也可能很麻烦。

至于 servlet 线程,是否阻塞:我从未尝试过(由于上述原因),但我假设它不会阻塞:您必须等待/轮询异步工作线程,直到它们完成(或失败)。否则 servlet 只会到达您的提交语句。

关于java - 全局事务可以/是​​否跨越多个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873945/

相关文章:

java - 在 openCSV 中使用转义字符

oracle - 是否有充分的理由不让您的应用程序处理任何交易?

Java多线程消息传递

java - 面向消息的中间件 (MoM) 与。企业服务总线 (ESB)

php - 事务中数据库查询的时间戳

java - MQ session .CLIENT_ACKNOWLEDGE

java - 在java中从url处的xml读取数据

java - 线程安全框架

java - 在数组中搜索与其他数字不同的数字

c# - 使用手动事务和分层事务进行单元测试