增加锁定时间“1分钟后,Pagemap null仍然被锁定”异常

时间:2011-03-18 14:56:26

标签: wicket

org.apache.wicket.protocol.http.request.InvalidUrlException:
org.apache.wicket.WicketRuntimeException: 
After 1 minute the Pagemap null is still locked by:
Thread[http-8443-3,5,main], giving up trying to get the page for path: 3:timer

这1分钟在哪里?是一个检票口设置,还是一个tomcat?要么 ...? 我该怎么修改呢?

2 个答案:

答案 0 :(得分:8)

虽然我同意Martijn的回答(您不应该让用户等待超过一分钟),但可以通过调用应用程序对象上的WebApplication.getRequestCycleSettings().setTimeout()来设置超时。

将其设置为3分钟的示例:

WebApplication.get().getRequestCycleSettings().setTimeout(Duration.minutes(3));

答案 1 :(得分:7)

而不是增加超时可能会确保用户的理智,保持页面映射锁定的请求不到1分钟。这可以通过使用像Quartz这样的作业框架并向其提交作业而不是在请求侦听器中执行繁重的处理来完成。通过这种方式,您的用户可以快速获得答案,并且您的响应时间会更好。

超时是Wicket特定的保护措施,可防止发生不良事件。国际海事组织应该减少而不是增加。不幸的是,许多Web应用程序都有让用户等待超过10秒的请求,因此很快就会出现问题。使用1分钟是明智的妥协。 AFAIK它不可配置。

超时是一种解决方案,用于处理时间过长的请求,并使页面映射保持较长时间。对页面映射的访问是同步的,这样开发人员在使用组件时就可以使用单线程,有状态的编程模型,而不是使用servlet非常有趣的(可怕的)多线程状态编程模型。

简而言之:不要伤害用户,使用作业框架来处理长时间运行的任务,并从用户界面卸载处理。

如果超时是由打开多个选项卡并使用两者的用户引起的,则另一种解决方案是启用多窗口支持。这将创建多个页面地图,每个页面地图都有自己的后卫。