我们有一个需要并行化的Websphere Java EE应用程序,我们希望使用CommonJ work components。
每个“线程”都需要自己查看来自数据库的数据。其中大部分都是预先提取的,但它仍然需要去数据库才能得到一些。我们预计所有这些线程的整体工作持续时间将“很长”(即基础数据有足够的时间进行更改)。
因此,我们需要确保应用程序使用的数据隔离,并在线程工作期间查询。
似乎确保这一点的唯一方法是拥有“全局”事务并使用XA事务。但是,如果可能的话,我们希望避免这种复杂性(和开销),并且正在寻找想法或替代方案:任何想法?
此外,Common-J Work Components在多大程度上(如果有的话)支持容器管理的事务?
@Karl:也许我的意思是开销。我们的想法是,XA事务和消息传递会导致共享事务的Common-J工作组件可以避免的开销? 正在操作的数据集将是> 300k个不同的数据行,每个数据行需要对其进行约100次计算。虽然这些可以划分为在共享,缓存,只读数据上操作的不同线程,但是复制到队列/读取队列的比较内存开销似乎过高。你同意吗?
@Karl:每个实体减少数百毫秒。我们还专注于将逻辑处理改进为一项单独的任务。
当需要所有线程在单个数据库中具有一致的数据视图时,是否需要使用XA事务?我对此的回答是每个线程都需要自己的JPA EntityManager(例如连接),并且需要XA才能协调它们的访问。
但是,如果我能在没有XA的情况下做到这一点那就更好了,不是吗?
答案 0 :(得分:1)
您对WAS中的XA交易有何疑问?如果您担心数据完整性,XA交易听起来很合适。
当谈到在WAS中创建和管理自己的线程时,它可能会有点讨厌,我会尽量远离管理自己的线程。并发的一种可能是将数据发布到队列或主题,并且有大量多个并发侦听器从队列中接收。这样您就可以配置并发性并让容器管理线程。
卡尔