我需要使用Java(从Oracle导出数据)生成报告,由于涉及的数据量较大,可能需要几分钟时间,因此当我提交表单时,屏幕会冻结直到结束。
如何在后台进程中生成报告,以便用户可以继续浏览?
JMS?如何使用JMS实现这一点?(欢迎任何示例或解释)
还有其他方法吗? 根据Java EE规范,哪种方法最佳?
我需要使用Java(从Oracle导出数据)生成报告,由于涉及的数据量较大,可能需要几分钟时间,因此当我提交表单时,屏幕会冻结直到结束。
如何在后台进程中生成报告,以便用户可以继续浏览?
JMS?如何使用JMS实现这一点?(欢迎任何示例或解释)
还有其他方法吗? 根据Java EE规范,哪种方法最佳?
是的,JMS可能是一个选项。您只需将消息发送到队列,然后一个特殊类型的EJB--消息驱动Bean--将接收并处理该消息。在这种情况下,该消息充当命令。您可以使用没有消息驱动Bean的JMS,但它会更加复杂。
如果您处于EJB 3.1环境中,可以尝试使用异步EJB。
否则,虽然规范不建议这样做,但您可以在Web容器中启动线程。您可以为每个作业启动一个线程,或者您可以在ServletContextListener
中启动/停止一个后台线程,该线程处理您存储在数据库表中的命令。
使用异步作业表面上非常容易,但对于生产环境,您需要考虑如何管理错误、监视进度、重试失败的作业、确保没有两个相同的作业同时运行等。每种方法都有其优点和缺点。还要注意您需要为事务选择的策略(JMS是事务性的,我不确定异步EJB 3.1是否也是如此,如果使用JDBC事务或UserTransaction
正确处理,则自定义线程和数据库表也可以进行事务处理)。
希望这有所帮助。