Wicket:如何处理长时间运行的任务

2023-12-24

我已经设置了一个 Wicket + Hibernate + Spring Web 应用程序,其中涉及收集一些数据(生成并返回一些文件),将其存储在数据库中,创建一些图像并将所有这些显示在网页上。

这对于短期运行来说效果很好,但有时收集数据(涉及一些远程数字处理)需要太长时间(20 分钟以上)并且超时。我尝试使用两种方法来解决这个问题,但它们都显示出一些问题。

第一种方法是使用AjaxLazyLoadPanel http://static.ddpoker.com/javadoc/wicket-extensions/1.4-m1/org/apache/wicket/extensions/ajax/markup/html/AjaxLazyLoadPanel.htmls 并在 getLazyLoadComponent 中执行所有操作。这对于短时间运行来说效果很好,但对于 20 多分钟的运行来说,由于超时,LazyLoadComponents 将无法加载(这是一个很好的矛盾修辞)。

第二种方法涉及创建一个带有附加内容的中间片段AjaxSelfUpdatingTimerBehavior https://ci.apache.org/projects/wicket/apidocs/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.html持续时间设置为 10 秒,轮询在数字运算中创建的文件。这似乎使任务在后台运行没有问题,但当返回的数据需要存储在数据库中时会失败。我正在使用“在视图中打开会话”模式,但在 20 分钟后尝试存储数据时可能会失败? (解决方案可能在于解决这个问题..)。

由于上述问题,我现在正在阅读处理这些长时间运行的任务的替代方法,并发现:

  • org.apache.wicket.util.time.Task https://ci.apache.org/projects/wicket/apidocs/org/apache/wicket/util/thread/Task.html
  • org.apache.wicket.util.watch.ModificationWatcher https://ci.apache.org/projects/wicket/apidocs/org/apache/wicket/util/watch/ModificationWatcher.html

我现在想知道这些中的任何一个是否更适合解决我在运行任务和随后将数据存储在数据库中时遇到的超时问题,或者是否有人有任何其他解决方案可以帮助解决这个问题情况。

我真的很想知道一种新方法是否可行,然后再花一天时间实施一些最终可能行不通的方法。

此致,
Tim


我知道我们已经成功地使用带有附加 AjaxSelfUpdatingTimerBehavior 的面板。任务和结果部分与视图逻辑分离,但可以通过您创建的服务供视图访问。我们使用的服务实现负责启动 TheadPool 或 ExecutorService 来运行各个任务。该服务可以提供一种方法来监视正在发生的特定作业/呼叫的进度/状态。一旦完成,它还应该使数据可用于视图。将 SessionFactory 注入服务实现(或注入 DAO)应该足以在 WebSession 之外创建 HibernateSession。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wicket:如何处理长时间运行的任务 的相关文章

随机推荐