JavaEE提交表单并让后台流程正常工作?

JavaEE提交表单并让后台流程正常工作?,java,jakarta-ee,jms,background-process,Java,Jakarta Ee,Jms,Background Process,我需要用java(从oracle导出数据)生成一份报告,根据涉及的数据量,该报告可能需要几分钟的时间,因此当我提交表单时,屏幕会冻结,直到它结束 如何在后台进程中生成报告,以便用户可以继续浏览 JMS?如何使用JMS实现这一点?(欢迎任何示例或解释) 还有别的办法吗? 根据JavaEE规范,什么是最佳选项?是的,JMS可能是一个选项。您只需向队列发送一条消息,然后消息驱动Bean(一种特殊的EJB)将接收并处理该消息。在本例中,消息的作用类似于命令。不过,您可以在不使用消息驱动Bean的情况下使

我需要用java(从oracle导出数据)生成一份报告,根据涉及的数据量,该报告可能需要几分钟的时间,因此当我提交表单时,屏幕会冻结,直到它结束

如何在后台进程中生成报告,以便用户可以继续浏览

JMS?如何使用JMS实现这一点?(欢迎任何示例或解释)

还有别的办法吗?
根据JavaEE规范,什么是最佳选项?

是的,JMS可能是一个选项。您只需向队列发送一条消息,然后消息驱动Bean(一种特殊的EJB)将接收并处理该消息。在本例中,消息的作用类似于命令。不过,您可以在不使用消息驱动Bean的情况下使用JMS,但它有点复杂

如果您在EJB3.1环境中,您可以尝试

否则,虽然规范不建议这样做,但您可以在web容器中启动一个线程。您可以为每个作业启动一个线程,也可以在
ServletContextListener
中启动/停止一个后台线程,该线程处理存储在数据库表中的命令

使用异步作业表面上很容易,但对于生产,您需要考虑如何管理错误、监视进度、重试失败的作业、确保不同时运行两个相同的作业等。每种方法都有其优缺点。还要注意事务处理所需的策略(JMS是事务处理的,对于异步EJB3.1我不太清楚,如果使用JDBCTransaction或
UserTransaction
正确处理事务,则可以处理自定义线程和数据库表)


希望能有所帮助。

嘿,谢谢你的回答,很抱歉我反应太晚,我会试试的。但是,是否仍然需要查询异步进程的状态??