我目前正在编写一个应用程序,该应用程序需要我计算一些需要一些时间才能完成的东西。因此,我在后台进行此计算。我现在实现了一个解决方案,该解决方案Thread
通过ExecutorService
. 这些线程定期向 ( volatile
)报告其进度IModel
。此外,我正在使用通过AjaxSelfUpdatingTimerBehavior
将其表示的进度打印IModel
到屏幕来更新网站。通过这样做,网站保持响应,任务可以通过单击按钮中断,并且请求长期任务的 HTTP 请求不会超时。
然而,Wicket 不喜欢Serializable
在它的WebPage
orPanel
实例中没有引用,我想知道解决这个问题的最佳方法是什么。现在,我编写了一个小管理器类,它使用一个static
变量引用的现金,这就是我避免序列化限制的方式。触发任务的WebPage
实例现在只包含对我的经理类在调用任务时分配给它的唯一 ID 的引用。
当然,用这种方法我必须自己清理,我也担心安全,因为我还没有采取措施来避免不同用户启动的任务的干扰。此外,这对我来说感觉不对,因为我想将此任务保持在范围内,WebPage
而不是让任务逃逸到全局环境中。我敢肯定,有更好的方法来做到这一点!
感谢您对此事的任何想法并分享您的经验!