处理EJB事务超时以进行循环

时间:2019-02-12 02:53:37

标签: java ejb-3.0

我有一种处理大量文件的方法。当文件大小增加时,此方法会超时。我正在使用容器管理的交易作为该方法。

我所做的是将文件分散到列表中,并提供了另一种方法进行操作,该方法装饰为@REQUIRES_NEW。

我正在通过新交易遍历新方法的列表。但是,如果在迭代的中间发生某件事,则该事务将回滚。它不会回滚以前的迭代。我也想回滚以前的迭代。

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

2 个答案:

答案 0 :(得分:0)

您可以考虑以下方法: 当客户端请求文件处理(startProcessing)时,服务器(EJB)启动用于处理文件的后台线程(例如,quartz-scheduler.org),并返回正在进行的操作的ID。如有必要,客户端可以使用此类ID取消Processing,getProcessingStatus等。

答案 1 :(得分:0)

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

 @StatelessDeployment(transactionTimeout=10)

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

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

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