如何在Java应用程序服务器上执行长时间运行?

时间:2013-06-24 07:46:51

标签: java-ee design-patterns

[我们正在使用JBoss 6,但我相信这个问题适用于任何JaveEE应用服务器]

我们有一个应用程序服务器,其中(除其他外)应该执行一些非常长时间运行的任务(可能需要长达数小时)。

通过调用某个EJB函数触发任务,但到目前为止,整个操作在此函数调用中运行,因此在EJB事务中运行。这样的事务会很快超时,只是延长事务超时似乎不是正确的解决方案。

整体任务可以很容易地分成加载/工作/存储部分,因此似乎没有严格要求在整个时间内进行交易。

所以问题是:做到这一点的“正确”方法是什么?

3 个答案:

答案 0 :(得分:1)

我绝对要求你看一下Quartz。这是以特定间隔安排任务的神奇工具。我们在我们的一个项目中使用了Quartz,它很棒。我们的场景是以Excel文件的形式从post中使用输入,然后异步处理那些巨大的excel,这可能需要很长时间,我们所做的是接受输入并安排作业在1秒后运行。 Spring也支持使用夸脱的作业调度,Jboss预先包装了夸脱。

答案 1 :(得分:1)

[不完全确定可以从我的问题中看到这个,但我找到了我正在寻找的答案]

可以通过WorkManager安排一些工作。

请参阅http://danielveselka.blogspot.de/2012/03/schedule-jobs-with-workmanager.html以获取有关它的文章的一些指示。

答案 2 :(得分:0)

执行此操作的一般正确方法是将这些任务作为作业,然后异步处理它们。 Spring有一个内置的框架。但一般情况下,您可以将长任务放在队列中,单独处理副Web应用程序,然后通过电子邮件通知用户,或者为用户提供可以检查状态的链接。