From 48b927327aab08b42d175bdaac7e55f48a9e73ab Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Fri, 27 Jul 2018 11:36:11 +0200 Subject: [PATCH] IDEMPIERE-2944 Preserve iDempiere session between sucessive webservice calls / found the previous sessions was not being closed properly --- .../adinterface/CompiereService.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java index 55f8907190..ede2d51623 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java @@ -471,11 +471,25 @@ public class CompiereService { ); if (m_connected && expired) { - if (log.isLoggable(Level.INFO)) log.info("Closing expired/invalid " + this); - Env.logout(); - ServerContext.dispose(); - m_loggedin = false; - m_connected = false; + synchronized (csMap) { + String key = getKey(m_AD_Client_ID, + m_AD_Org_ID, + m_userName, + m_AD_Role_ID, + m_M_Warehouse_ID, + m_locale, + m_password, + m_IPAddress); + if (ctxMap.containsKey(key)) { + Properties cachedCtx = ctxMap.get(key); + Env.getCtx().putAll(cachedCtx); + } + if (log.isLoggable(Level.INFO)) log.info("Closing expired/invalid " + this); + Env.logout(); + ServerContext.dispose(); + m_loggedin = false; + m_connected = false; + } } return expired; }