2010-02-22 121 views
6

我设置一个Wicket +休眠+春Web应用程序,包括收集一些数据(已产生了一些文件,并返回),存储在数据库中这一点,创造一些图像和显示这一切在网页上。检票:如何处理长时间运行的任务

这一切工作正常进行短版印刷,但有时收集的数据(其中包括一些远程数字运算)花费的时间太长(20分钟以上)和超时。我试图用两种方法解决这个问题,但是他们都显示出一些问题。

第一种方法是使用AjaxLazyLoadPanel S和刚做getLazyLoadComponent内的一切。这对于短期运行很有效,但对于超过20分钟的运行,由于超时,LazyLoadComponents不会加载(那里有很好的矛盾)。

第二种方法涉及创建一个中间片段,其中添加了AjaxSelfUpdatingTimerBehavior,其持续时间设置为10秒,用于轮询在数字运算中创建的文件。这似乎使任务在后台运行时没有问题,但在返回的数据需要存储在数据库中时失败。我在视图模式中使用Open Session,但在20分钟后试图存储数据时可能会失败? (解决方案可能在于解决这个问题..)。

由于上述问题,现在我在读的替代方法,以处理这些长期运行的任务和遇到:

我现在想知道如果这些可能更适合于解决我有两个运行的任务和存储在数据库中的数据之后的超时问题,或者如果任何人有任何其他的解决方案,可能会在这种情况下帮助。

我真的很想知道,如果一个新的方法是可行的,我花一天实现的东西,可能会变成不毕竟工作之前。

最好的问候,

回答

3

我知道我们曾在使用带有附加AjaxSelfUpdatingTimerBehavior一个小组成功。任务和结果部分与视图逻辑分开,但可通过您创建的服务访问该视图。然后,我们使用的服务实现负责启动用于运行单个任务的TheadPool或ExectutorService。该服务可以提供一种方法来监视正在发生的特定工作/呼叫的进展/状态。一旦完成,它也应该使数据可用于视图。将SessionFactory注入到服务实现(或注入的DAO)中应该足以在WebSession之外创建HibernateSession。

+0

谢谢,这件事情我想张贴问题,以及之后的(制定一个问题是,就像那样的橡胶闪避)。我仍然必须知道这是否能够真正解决问题,因为日志不会记录超时会话的任何内容。只是在数据库中缺少结果是不明智的。如果我了解更多信息,将会更新。 – Tim 2010-02-22 23:25:14

+1

结束了这种方法,并没有任何问题,因为..谢谢! – Tim 2010-02-27 17:57:48

+0

好听Tim! – Matt 2010-03-01 04:27:02

相关问题