未调用Vaadin web app中的分离事件

未调用Vaadin web app中的分离事件,vaadin,Vaadin,我的问题源于一个几乎与此处相同的问题(最终没有得到令人满意的答案): 像这个人一样,我希望在关闭打开我的应用程序的浏览器时,会发生分离事件;然而,这并没有发生。我尝试添加一个分离侦听器,重写分离方法,并同时执行这两项操作,但都没有成功。至于我如何知道没有调用分离事件,我的分离事件是一个简单的打印语句,它不会显示在输出中 注意,与前面提到的线程一样,我已经设置了心跳间隔(在我的例子中为2秒),并将closeIdelSessions设置为true。因此,我想我只需要等待六秒钟,但事实并非如此。当我

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

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

注意,与前面提到的线程一样,我已经设置了心跳间隔(在我的例子中为2秒),并将closeIdelSessions设置为true。因此,我想我只需要等待六秒钟,但事实并非如此。

当我尝试此操作时(找到下面代码的基本部分),detach()最终被调用。我用Jetty运行它,我没有触及它的默认值。关闭浏览器大约45分钟后,当我在控制台上看到“Detach called”登录时。是的,时间很长。原因是,只有在HttpSession过期后才清理最后一个UI(这取决于应用程序容器等设置)。如果你想更快地进行强制清理,你需要使用

@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) {
        ...
    }