java - 轮询Java EE后台任务状态 - 如何?

java - 轮询Java EE后台任务状态 - 如何?,第1张

我目前正在开发一个需要导入数据并进行处理的Web应用程序。这可能需要一些时间(可能在“几分钟”范围内,一旦数据集增长),所以我们在后台运行它 - 现在是时候在前端显示状态,而不是拖尾日志文件:)

前端正在使用Angular,连接到REST端点(JAX-RS)调用EJB中的服务,这些服务通过JPA持久存在。在JBoss EAP 6.4 / AS 7.5(EE6)中运行。标准的东西,但这是我第一次使用Java EE。

关于查询状态,定期轮询REST端点很好 - 我们不需要像websockets这样的花哨的东西。我们确实需要支持多个后台作业,以及由runstate(运行/完成/错误),进度和错误列表组成的信息。

所以,我目前有两个问题:

1)有没有比调用@Asynchronous EJB方法更合适的启动后台任务的方法?

2)我有哪些选项可以跟踪后台任务,哪种选择最适合?

我的第一个想法是保留一个HashMap,但是这个看起来像是太多的手动(和脆弱的)代码,看起来像是并发性和生命周期问题 - 我宁愿不重新发明轮子。安全的选择似乎是JPA坚持下去,但对于不稳定的状态信息来说,这似乎有些笨拙。

我显然不是第一个面对这些问题的人,但我的google-fu目前似乎缺乏:)

最佳答案:

1 个答案:

答案 0 :(得分:2)

可以使用@Asynchronous或使用JMS @MessageDriven

启动任务

来自java-ee-7 ManagedExecutorService也是一种选择。

然后,任务将更新自己的状态,该状态存储在@Singleton EJB内的ConcurrentHashMap中。

如果您在群集环境中,使用JPA可以更好地存储任务状态,因为@Singleton不适用于整个群集

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复