Vaadin web应用程序中的分离事件未被调用



我的问题源于一个与这里几乎相同的问题(最终没有得到令人满意的答案(:

https://vaadin.com/forum/thread/13932610

和这个人一样,我预计在关闭打开我的应用程序的浏览器时,会发生分离事件;然而,这并没有发生。我尝试添加一个分离侦听器,覆盖分离方法,并同时执行这两个操作,但都没有成功。至于我如何知道分离事件没有被调用,我的分离事件是一个简单的print语句,它不会显示在输出中。

请注意,与前面提到的线程一样,我已经设置了心跳间隔(在我的情况下为2秒(,并将closeIdelSessions设置为true。所以,我以为我只需要等六秒钟,但事实并非如此。

当我尝试这样做(找到下面代码的重要部分(时,最终会调用detachment((。我用Jetty运行了这个,并且没有触及它的默认值。关闭浏览器大约45分钟后,当我看到"Detach called"登录控制台时,它发出嘟嘟声。是的,时间很长。原因是最后一个UI只有在HttpSession过期后才会被清理(这取决于应用程序容器等设置(。如果你想更快地进行强制清理,你需要使用https://vaadin.com/directory/component/cleanupservlet-add-on

@Push
@SuppressWarnings("serial")
public class DemoUI extends UI {
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = DemoUI.class, heartbeatInterval=5, closeIdleSessions=true)
public static class Servlet extends VaadinServlet {
}
@Override
public void detach() {
System.out.println("Detach called");                            
}
@Override
protected void init(VaadinRequest vaadinRequest) {
...
}

最新更新