From d37993a992a2cff96a18a0b7a790e9cc9f0baf97 Mon Sep 17 00:00:00 2001 From: hengsin Date: Tue, 23 Nov 2021 19:45:49 +0800 Subject: [PATCH] IDEMPIERE-5049 Zk Session and Desktop object not destroy immediately after logout (#999) - fix invalidation of session --- .../src/org/adempiere/webui/AdempiereWebUI.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 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 5baca6bceb..9554fb8e37 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 @@ -190,10 +190,10 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb final Session session = desktop.getSession(); //clear context, invalidate session - Env.getCtx().clear(); - destroySession(session); - desktop.setAttribute(DESKTOP_SESSION_INVALIDATED_ATTR, Boolean.TRUE); + Env.getCtx().clear(); Adempiere.getThreadPoolExecutor().schedule(() -> { + ((SessionCtrl)session).invalidateNow(); + desktop.setAttribute(DESKTOP_SESSION_INVALIDATED_ATTR, Boolean.TRUE); try { desktopCache.removeDesktop(desktop); } catch (Throwable t) { @@ -415,7 +415,7 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb //clear context, invalidate session Env.getCtx().clear(); - destroySession(session); + afterLogout(session); desktop.setAttribute(DESKTOP_SESSION_INVALIDATED_ATTR, Boolean.TRUE); //redirect to login page @@ -429,7 +429,7 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb } } - private void destroySession(final Session session) { + private void afterLogout(final Session session) { try { ((SessionCtrl)session).onDestroyed(); } catch (Throwable t) { @@ -443,8 +443,6 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb */ public void logoutAfterTabDestroyed(){ Desktop desktop = Executions.getCurrent().getDesktop(); - if (desktop.isServerPushEnabled()) - desktop.enableServerPush(false); DesktopWatchDog.removeDesktop(desktop); Session session = logout0(); @@ -453,7 +451,7 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb Env.getCtx().clear(); SessionCtrl ctrl = (SessionCtrl) session; if (!ctrl.isInvalidated() && session.getNativeSession() != null) - destroySession(session); + afterLogout(session); }