diff --git a/src/main/java/org/appng/tomcat/session/Session.java b/src/main/java/org/appng/tomcat/session/Session.java index dd3e556..95f2d73 100644 --- a/src/main/java/org/appng/tomcat/session/Session.java +++ b/src/main/java/org/appng/tomcat/session/Session.java @@ -126,11 +126,6 @@ public synchronized SessionData serialize(String alternativeSiteName) throws IOE } public static Session load(Manager manager, SessionData sessionData) throws IOException, ClassNotFoundException { - return load(manager, sessionData, true); - } - - public static Session load(Manager manager, SessionData sessionData, boolean addToManager) - throws IOException, ClassNotFoundException { Session session = null; try (ByteArrayInputStream is = new ByteArrayInputStream(sessionData.getData()); ObjectInputStream ois = Utils.getObjectInputStream(is, sessionData.getSite(), manager.getContext())) { @@ -142,9 +137,6 @@ public static Session load(Manager manager, SessionData sessionData, boolean add session.site = sessionData.getSite(); session.access(); session.setClean(); - if (addToManager) { - manager.add(session); - } } } return session; diff --git a/src/main/java/org/appng/tomcat/session/SessionManager.java b/src/main/java/org/appng/tomcat/session/SessionManager.java index 561caf1..ff2c925 100644 --- a/src/main/java/org/appng/tomcat/session/SessionManager.java +++ b/src/main/java/org/appng/tomcat/session/SessionManager.java @@ -118,6 +118,7 @@ public Session findSession(String id) throws IOException { } else { try { session = Session.load(this, sessionData); + this.add(session); if (log().isDebugEnabled()) { if (null == session) { log().debug(String.format("Session %s found, but has expired!", id)); diff --git a/src/main/java/org/appng/tomcat/session/hazelcast/HazelcastSessionManager.java b/src/main/java/org/appng/tomcat/session/hazelcast/HazelcastSessionManager.java index 35a5b48..ccd7e52 100644 --- a/src/main/java/org/appng/tomcat/session/hazelcast/HazelcastSessionManager.java +++ b/src/main/java/org/appng/tomcat/session/hazelcast/HazelcastSessionManager.java @@ -134,6 +134,7 @@ public void processExpires() { AtomicInteger count = new AtomicInteger(0); keys.forEach(k -> { try { + // no lock needed here! SessionData sessionData = getPersistentSessions().get(k); if (null == sessionData) { if (log.isDebugEnabled()) { @@ -143,8 +144,7 @@ public void processExpires() { removeLocal(sessions.get(k)); } } else { - // do NOT add the session to the manager, since this would override the locally cached session! - Session session = Session.load(this, sessionData, false); + Session session = Session.load(this, sessionData); if (null == session) { // session is not valid, so manager.remove(session, true) already has been called // which in turn will remove the session from the local cache and also from the persistent store