【问题标题】:Increase the lock time for "After 1 minute the Pagemap null is still locked" Exception增加“1分钟后Pagemap null仍被锁定”异常的锁定时间
【发布时间】:2011-03-18 14:56:25
【问题描述】:
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 分钟设置在哪里?是检票口设置还是雄猫?或者 ...? 我该如何修改?

【问题讨论】:

    标签: wicket


    【解决方案1】:

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

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

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

    【讨论】:

    • 有时您必须等待报告,因此设置更大的超时时间有用的,
    【解决方案2】:

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

    超时是 Wicket 特定的保护措施,可防止发生不良事件。 IMO 它应该减少而不是增加。不幸的是,许多 Web 应用程序的请求会使用户等待超过 10 秒,因此很快就会出现问题。使用 1 分钟是一个明智的折衷方案。 AFAIK 它是不可配置的。

    超时是处理时间过长的请求的解决方案,并且会长时间锁定页面映射。对页面映射的访问是同步的,因此您(开发人员)在使用组件时拥有一个单线程、有状态的编程模型,而不是让使用 servlet 变得如此有趣的(可怕的)多线程、有状态的编程模型。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 2017-07-04
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多