处理循环的EJB事务超时

问题描述 投票:2回答:2

我有一个处理大量文件的方法。事情是,当文件大小增加时,此方法将超时。我正在使用该方法的容器管理事务。

我所做的是将文件转换为列表并提供以另一种装饰为@REQUIRES_NEW的方法进行操作。

我正在使用新事务在新方法上循环遍历列表。但是当在迭代的中间发生某些事情时,只有事务才会回滚。它不会回滚先前的迭代。我也想回滚前面的迭代。

由于超时问题,我无法将整个操作视为一个操作。正在寻找对此的反馈。

java ejb-3.0
2个回答
0
投票

您可以考虑以下方法:当客户端请求文件处理(startProcessing)时,服务器(EJB)启动后台线程(例如quartz-scheduler.org)来处理文件并返回正在进行的操作的id。如果需要,那么客户端可以使用这样的id取消处理,getProcessingStatus等。


0
投票

检查增加ejb方法的事务超时,例如,如果使用无状态bean,则可以简单地进行注释

 @StatelessDeployment(transactionTimeout=10)

另一种选择是,检查EJB异步方法

https://docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html

异步方法通常用于长时间运行的操作,处理器密集型任务,后台任务,增加应用程序吞吐量或改进应用程序响应时间。一旦过程结束,您就可以获得该过程的状态。

© www.soinside.com 2019 - 2024. All rights reserved.