0

我们有一个需要并行化的 Websphere Java EE 应用程序,我们希望为此使用CommonJ 工作组件

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

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

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

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

@Karl:也许我只是指开销。我们的想法是 XA 事务和消息传递会产生共享事务的 Common-J 工作组件可以避免的开销?正在操作的数据集将是超过 300k 的不同数据行,每行需要对其进行约 100 次计算。尽管这些可以划分到不同的线程上操作共享、缓存、只读数据,但复制到/读取队列的相对内存开销似乎令人望而却步。你会同意吗?

@Karl:每个实体几十到几百毫秒。我们还专注于改进逻辑处理作为一项单独的任务。
当要求所有线程在单个数据库中具有一致的数据视图时,我是否需要使用 XA 事务?我对此的回答是,每个线程都需要自己的 JPA EntityManager(例如连接),并且需要 XA 来协调它们的访问。
但是,如果我可以在没有 XA 的情况下做到这一点,那就更好了,不是吗?

4

1 回答 1

1

您觉得 WAS 中的 XA 事务有什么复杂之处?如果您担心数据完整性,那么 XA 事务听起来很合适。

当谈到在 WAS 中创建和管理自己的线程时,它可能会变得有点讨厌,我会尽量避免管理自己的线程。使事情并发的一种可能是将数据发布到队列或主题,并让大量的多个并发侦听器从队列中接收。这样你就可以配置并发并让容器管理线程。

卡尔

于 2009-04-22T15:11:54.220 回答