From d8ae21e5405ce37746fda7e535e5b62543265331 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Wed, 6 Mar 2019 09:55:49 +0300 Subject: [PATCH] Fixed - ClassNotFoundException is thrown by Tomcat Session Manager in readMode = MEMORY #1959 --- .../java/org/redisson/tomcat/RedissonSession.java | 12 ++++++++++++ .../org/redisson/tomcat/RedissonSessionManager.java | 8 ++------ .../java/org/redisson/tomcat/RedissonSession.java | 12 ++++++++++++ .../org/redisson/tomcat/RedissonSessionManager.java | 8 ++------ .../java/org/redisson/tomcat/RedissonSession.java | 12 ++++++++++++ .../org/redisson/tomcat/RedissonSessionManager.java | 8 ++------ .../java/org/redisson/tomcat/RedissonSession.java | 12 ++++++++++++ .../org/redisson/tomcat/RedissonSessionManager.java | 8 ++------ 8 files changed, 56 insertions(+), 24 deletions(-) diff --git a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java index c5bfbe37e..a892b9029 100644 --- a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -51,6 +51,7 @@ public class RedissonSession extends StandardSession { public static final Set ATTRS = new HashSet(Arrays.asList(IS_NEW_ATTR, IS_VALID_ATTR, THIS_ACCESSED_TIME_ATTR, MAX_INACTIVE_INTERVAL_ATTR, LAST_ACCESSED_TIME_ATTR, CREATION_TIME_ATTR)); + private boolean loaded; private final RedissonSessionManager redissonManager; private final Map attrs; private RMap map; @@ -87,6 +88,17 @@ public class RedissonSession extends StandardSession { } return map.get(name); + } else { + if (!loaded) { + synchronized (this) { + if (!loaded) { + Map storedAttrs = map.readAllMap(); + + load(storedAttrs); + loaded = true; + } + } + } } return super.getAttribute(name); diff --git a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index e90d93e3a..c9b253d91 100644 --- a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -170,13 +170,9 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { if (id != null) { Map attrs = new HashMap(); try { - if (readMode == ReadMode.MEMORY) { - attrs = getMap(id).readAllMap(); - } else { - attrs = getMap(id).getAll(RedissonSession.ATTRS); - } + attrs = getMap(id).getAll(RedissonSession.ATTRS); } catch (Exception e) { - throw new IOException(e); + log.error("Can't read session object by id: " + id, e); } RedissonSession session = (RedissonSession) createEmptySession(); diff --git a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java index ffa57bf25..3a783fdf0 100644 --- a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -51,6 +51,7 @@ public class RedissonSession extends StandardSession { public static final Set ATTRS = new HashSet(Arrays.asList(IS_NEW_ATTR, IS_VALID_ATTR, THIS_ACCESSED_TIME_ATTR, MAX_INACTIVE_INTERVAL_ATTR, LAST_ACCESSED_TIME_ATTR, CREATION_TIME_ATTR)); + private boolean loaded; private final RedissonSessionManager redissonManager; private final Map attrs; private RMap map; @@ -87,6 +88,17 @@ public class RedissonSession extends StandardSession { } return map.get(name); + } else { + if (!loaded) { + synchronized (this) { + if (!loaded) { + Map storedAttrs = map.readAllMap(); + + load(storedAttrs); + loaded = true; + } + } + } } return super.getAttribute(name); diff --git a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index 1ec7fb814..4fa38c3bb 100644 --- a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -148,13 +148,9 @@ public class RedissonSessionManager extends ManagerBase { if (id != null) { Map attrs = new HashMap(); try { - if (readMode == ReadMode.MEMORY) { - attrs = getMap(id).readAllMap(); - } else { - attrs = getMap(id).getAll(RedissonSession.ATTRS); - } + attrs = getMap(id).getAll(RedissonSession.ATTRS); } catch (Exception e) { - throw new IOException(e); + log.error("Can't read session object by id: " + id, e); } RedissonSession session = (RedissonSession) createEmptySession(); diff --git a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java index 23c4c55a9..a273225ad 100644 --- a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -51,6 +51,7 @@ public class RedissonSession extends StandardSession { public static final Set ATTRS = new HashSet(Arrays.asList(IS_NEW_ATTR, IS_VALID_ATTR, THIS_ACCESSED_TIME_ATTR, MAX_INACTIVE_INTERVAL_ATTR, LAST_ACCESSED_TIME_ATTR, CREATION_TIME_ATTR)); + private boolean loaded; private final RedissonSessionManager redissonManager; private final Map attrs; private RMap map; @@ -87,6 +88,17 @@ public class RedissonSession extends StandardSession { } return map.get(name); + } else { + if (!loaded) { + synchronized (this) { + if (!loaded) { + Map storedAttrs = map.readAllMap(); + + load(storedAttrs); + loaded = true; + } + } + } } return super.getAttribute(name); diff --git a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index a4a7b8363..8fc03d2bb 100644 --- a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -147,13 +147,9 @@ public class RedissonSessionManager extends ManagerBase { if (id != null) { Map attrs = new HashMap(); try { - if (readMode == ReadMode.MEMORY) { - attrs = getMap(id).readAllMap(); - } else { - attrs = getMap(id).getAll(RedissonSession.ATTRS); - } + attrs = getMap(id).getAll(RedissonSession.ATTRS); } catch (Exception e) { - throw new IOException(e); + log.error("Can't read session object by id: " + id, e); } RedissonSession session = (RedissonSession) createEmptySession(); diff --git a/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSession.java index ee9b0a2e2..b3a14dec0 100644 --- a/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -51,6 +51,7 @@ public class RedissonSession extends StandardSession { public static final Set ATTRS = new HashSet(Arrays.asList(IS_NEW_ATTR, IS_VALID_ATTR, THIS_ACCESSED_TIME_ATTR, MAX_INACTIVE_INTERVAL_ATTR, LAST_ACCESSED_TIME_ATTR, CREATION_TIME_ATTR)); + private boolean loaded; private final RedissonSessionManager redissonManager; private final Map attrs; private RMap map; @@ -87,6 +88,17 @@ public class RedissonSession extends StandardSession { } return map.get(name); + } else { + if (!loaded) { + synchronized (this) { + if (!loaded) { + Map storedAttrs = map.readAllMap(); + + load(storedAttrs); + loaded = true; + } + } + } } return super.getAttribute(name); diff --git a/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index a4a7b8363..8fc03d2bb 100644 --- a/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -147,13 +147,9 @@ public class RedissonSessionManager extends ManagerBase { if (id != null) { Map attrs = new HashMap(); try { - if (readMode == ReadMode.MEMORY) { - attrs = getMap(id).readAllMap(); - } else { - attrs = getMap(id).getAll(RedissonSession.ATTRS); - } + attrs = getMap(id).getAll(RedissonSession.ATTRS); } catch (Exception e) { - throw new IOException(e); + log.error("Can't read session object by id: " + id, e); } RedissonSession session = (RedissonSession) createEmptySession();