Java EE提交表单并离开后台进程工作?

问题描述:

我需要用java(从oracle导出数据)生成一个报告,这个报告可能需要几分钟的时间,涉及的数据量很大,所以当我提交表单时,屏幕冻结直到结束。Java EE提交表单并离开后台进程工作?

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

JMS?我如何使用JMS来做到这一点? (欢迎任何示例或解释)

有没有另一种方法? 根据Java EE规范,最好的选择是什么?

是的,JMS可能是一个选项。您只需将消息发送到队列,然后Message Driven Bean(一种特殊类型的EJB)将接收并处理消息。这个消息在这种情况下就像一个命令。尽管你可以使用没有消息驱动Bean的JMS,但它有点复杂。

如果您处于EJB 3.1环境中,您可以试试asynchronous EJB

否则,虽然它不被规范推荐,但您可以在Web容器中启动一个线程。您可以为每个作业启动一个线程,也可以在ServletContextListener中启动/停止一个后台线程,该处理程序处理存储在数据库的表中的命令。

使用异步作业在表面上很容易,但对于生产,您需要考虑如何管理错误,监视进度,重试失败的作业,确保没有两个相同的作业同时运行等。有自己的优点和缺点。还要注意事务所需的策略(JMS是事务处理的,我不确切知道异步EJB 3.1,如果JDBC事务或UserTransaction正确执行操作,可以处理自定义线程和数据库表)。

希望它有帮助。

+0

嘿谢谢你的回答,并对我迟到的回应感到抱歉,我会尝试。 但无论如何,请参阅异步过程的状态 过程? – ErVeY 2010-07-30 19:16:15