Multithreading 使用common-j组件进行事务管理

Multithreading 使用common-j组件进行事务管理,multithreading,transactions,jakarta-ee,websphere,parallel-processing,Multithreading,Transactions,Jakarta Ee,Websphere,Parallel Processing,我们有一个需要并行化的WebSphereJavaEE应用程序,我们希望使用它 每个“线程”都需要自己查看来自数据库的数据。其中大部分都是预取的,但仍需要转到数据库中获取一些。我们预计,所有这些线程的总体工作持续时间将是“长的”(即,有足够的时间更改基础数据) 因此,我们需要确保应用程序使用的数据与线程工作过程中查询的数据隔离 似乎确保这一点的唯一方法是拥有“全局”事务并使用XA事务。但如果可能的话,我们希望避免这种复杂性(和开销),并且正在寻找想法或替代方案:有想法吗 此外,Common-J工作

我们有一个需要并行化的WebSphereJavaEE应用程序,我们希望使用它

每个“线程”都需要自己查看来自数据库的数据。其中大部分都是预取的,但仍需要转到数据库中获取一些。我们预计,所有这些线程的总体工作持续时间将是“长的”(即,有足够的时间更改基础数据)

因此,我们需要确保应用程序使用的数据与线程工作过程中查询的数据隔离

似乎确保这一点的唯一方法是拥有“全局”事务并使用XA事务。但如果可能的话,我们希望避免这种复杂性(和开销),并且正在寻找想法或替代方案:有想法吗

此外,Common-J工作组件在多大程度上(如果有的话)支持容器管理的事务

@卡尔:也许我只是指头顶。我们的想法是XA事务和消息传递会产生共享事务的Common-J工作组件可以避免的开销? 正在操作的数据集将是>300k个不同的数据行,每个数据行需要对其进行约100次计算。虽然这些线程可以分为不同的线程,对共享的、缓存的、只读的数据进行操作,但复制到队列上/从队列中读取数据的相对内存开销似乎是不允许的。你同意吗

@卡尔:每个实体从几十毫秒到几百毫秒不等。我们还将重点放在作为一项单独任务改进逻辑处理上。
当需要所有线程在单个数据库中具有一致的数据视图时,我是否需要使用XA事务?我对此的回答是,每个线程都需要自己的JPA EntityManager(例如连接),并且需要XA来协调它们的访问。

但是,如果我可以在没有XA的情况下完成这项工作,那就更好了,不是吗?

您发现WAS中XA事务有什么复杂之处?听上去,如果您担心数据的完整性,XA事务听起来很适合

当涉及到在WAS中创建和管理自己的线程时,可能会有点麻烦,我会尽量避免管理自己的线程。使事情并发的一种可能方法是将数据发布到队列或主题,并让大量的多个并发侦听器从队列接收数据。通过这种方式,您可以配置并发性并让容器管理线程


Karl

我想你会惊讶于XA和消息传递的开销有多低,听起来我更担心及时处理数据的逻辑。您可以接受哪种时间尺度,以及您认为处理一个实体需要多长时间?您还可以将非常简单的WAS进行集群。卡尔