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