我有一些用于与 bean 托管事务一起运行的代码(我的代码将处理何时启动或提交事务)。此代码已迁移到容器管理事务,最后在 Java Batch 中使用(Wildfly 中的 JSR-352)。
现在我们处理的数据量增加了,我们看到了与事务相关的问题。在各种情况下,甚至查询都会失败,并且异常表明事务被标记为仅回滚。所以我认为之前的迁移过程中一定发生了一些错误。
我仍然想使用容器管理的事务,但是......
- 如何在批处理中正确使用 CDI,以便它接收 EntityManager?我是使用@PersistenceContext、@PersistenceUnit 或@Inject 注释,还是组合使用?
- 如何使用合理的 CDI 范围?查看https://github.com/jberet/jberet-user-guide/blob/master/custom_cdi_scopes/README.md会出现三个范围:作业、步骤和分区。由于我运行了太长时间的批处理,我可能需要分区范围,但是批处理将如何控制分区?
- 我了解到读取器/处理器/写入器模式控制大量记录的事务 ootb。该模式是否适用于读取记录、处理它然后立即更新或删除它的代码?