From 460a4798e9d83fad0b68f5266d4e62ec05a5c2f2 Mon Sep 17 00:00:00 2001 From: hengsin Date: Mon, 22 Nov 2021 21:44:33 +0800 Subject: [PATCH] IDEMPIERE-5049 Zk Session and Desktop object not destroy immediately after logout (#997) - Fix invalidation of session --- .../src/org/adempiere/webui/AdempiereWebUI.java | 11 +++++------ .../src/org/adempiere/webui/util/DesktopWatchDog.java | 9 +++------ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java index d203e00526..5baca6bceb 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java @@ -408,10 +408,7 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb */ public void logout() { - final Desktop desktop = Executions.getCurrent().getDesktop(); - if (desktop.isServerPushEnabled()) - desktop.enableServerPush(false); - + final Desktop desktop = Executions.getCurrent().getDesktop(); final WebApp wapp = desktop.getWebApp(); final DesktopCache desktopCache = ((WebAppCtrl) wapp).getDesktopCache(desktop.getSession()); final Session session = logout0(); @@ -438,7 +435,7 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb } catch (Throwable t) { t.printStackTrace(); } - session.invalidate(); + ((SessionCtrl)session).invalidateNow(); } /** @@ -454,7 +451,9 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb //clear context, invalidate session Env.getCtx().clear(); - destroySession(session); + SessionCtrl ctrl = (SessionCtrl) session; + if (!ctrl.isInvalidated() && session.getNativeSession() != null) + destroySession(session); } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/DesktopWatchDog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/DesktopWatchDog.java index e6dae1b8d1..463a4a2313 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/DesktopWatchDog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/DesktopWatchDog.java @@ -105,12 +105,9 @@ public class DesktopWatchDog { } if (!toDestroy.isEmpty()) { for(Session session : toDestroy) { - try { - ((SessionCtrl)session).onDestroyed(); - } catch (Throwable t) { - t.printStackTrace(); - } - session.invalidate(); + if (!((SessionCtrl)session).isInvalidated()) { + ((SessionCtrl)session).invalidateNow(); + } } } }