1

我目前正在编写一个应用程序,该应用程序需要我计算一些需要一些时间才能完成的东西。因此,我在后台进行此计算。我现在实现了一个解决方案,该解决方案Thread通过ExecutorService. 这些线程定期向 ( volatile)报告其进度IModel。此外,我正在使用通过AjaxSelfUpdatingTimerBehavior将其表示的进度打印IModel到屏幕来更新网站。通过这样做,网站保持响应,任务可以通过单击按钮中断,并且请求长期任务的 HTTP 请求不会超时。

然而,Wicket 不喜欢Serializable在它的WebPageorPanel实例中没有引用,我想知道解决这个问题的最佳方法是什么。现在,我编写了一个小管理器类,它使用一个static变量引用的现金,这就是我避免序列化限制的方式。触发任务的WebPage实例现在只包含对我的经理类在调用任务时分配给它的唯一 ID 的引用。

当然,用这种方法我必须自己清理,我也担心安全,因为我还没有采取措施来避免不同用户启动的任务的干扰。此外,这对我来说感觉不对,因为我想将此任务保持在范围内,WebPage而不是让任务逃逸到全局环境中。我敢肯定,有更好的方法来做到这一点!

感谢您对此事的任何想法并分享您的经验!

4

1 回答 1

2

您的方法听起来非常合理:将任务处理传递给非 Web 实例(可能是 Spring 管理的单例),并在组件/模型中保留一个标识符。

于 2013-05-10T21:06:48.443 回答