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

tel*_*bog 7 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
Run Code Online (Sandbox Code Playgroud)

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

biz*_*lop 8

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

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

WebApplication.get().getRequestCycleSettings().setTimeout(Duration.minutes(3));
Run Code Online (Sandbox Code Playgroud)


Mar*_*rst 7

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

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

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

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

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