我们有一个需要并行化的 Websphere Java EE 应用程序,我们希望为此使用CommonJ 工作组件。
每个“线程”都需要对来自数据库的数据有自己的看法。其中大部分是预取的,但仍需要到数据库中获取一些。我们预计所有这些线程的整体工作的持续时间将是“长的”(即有足够的时间来更改基础数据)。
因此,我们需要确保隔离应用程序使用的数据并在线程工作过程中查询。
似乎确保这一点的唯一方法是进行“全局”事务并使用 XA 事务。但我们希望尽可能避免这种复杂性(和开销),并且正在寻找想法或替代方案:有什么想法吗?
此外,Common-J 工作组件在多大程度上(如果有的话)支持容器管理的事务?
@Karl:也许我只是指开销。我们的想法是 XA 事务和消息传递会产生共享事务的 Common-J 工作组件可以避免的开销?正在操作的数据集将是超过 300k 的不同数据行,每行需要对其进行约 100 次计算。尽管这些可以划分到不同的线程上操作共享、缓存、只读数据,但复制到/读取队列的相对内存开销似乎令人望而却步。你会同意吗?
@Karl:每个实体几十到几百毫秒。我们还专注于改进逻辑处理作为一项单独的任务。
当要求所有线程在单个数据库中具有一致的数据视图时,我是否需要使用 XA 事务?我对此的回答是,每个线程都需要自己的 JPA EntityManager(例如连接),并且需要 XA 来协调它们的访问。
但是,如果我可以在没有 XA 的情况下做到这一点,那就更好了,不是吗?