2

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

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

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

感谢您的回复。

4

1 回答 1

2

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

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

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

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

于 2013-06-01T17:29:53.260 回答