Java EE 提交表单并保持后台进程运行?

3

我需要使用Java(从Oracle导出数据)生成报告,由于涉及的数据量较大,可能需要几分钟时间,因此当我提交表单时,屏幕会冻结直到结束。

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

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

还有其他方法吗? 根据Java EE规范,哪种方法最佳?

1个回答

1

是的,JMS可能是一个选项。您只需将消息发送到队列,然后一个特殊类型的EJB--消息驱动Bean--将接收并处理该消息。在这种情况下,该消息充当命令。您可以使用没有消息驱动Bean的JMS,但它会更加复杂。

如果您处于EJB 3.1环境中,可以尝试使用异步EJB

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

使用异步作业表面上非常容易,但对于生产环境,您需要考虑如何管理错误、监视进度、重试失败的作业、确保没有两个相同的作业同时运行等。每种方法都有其优点和缺点。还要注意您需要为事务选择的策略(JMS是事务性的,我不确定异步EJB 3.1是否也是如此,如果使用JDBC事务或UserTransaction正确处理,则自定义线程和数据库表也可以进行事务处理)。

希望这有所帮助。


嘿,感谢你的回答,很抱歉我回复晚了,我会尝试一下。但是有没有办法查询异步进程的状态呢? - ErVeY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接