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 c5bfbe37e8c0beacfcde87e1ed9de5e74b3c3bee..a892b9029ede808ae6fc0e9c4e3cbea98b0eb3cd 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 e90d93e3a781348f10de6bc2580e6bc4fde714bf..c9b253d91e6d246abd85fa9179e1937d2ad41374 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 ffa57bf25e26e34fa16c3e63ee988b7957e24163..3a783fdf0050f075ea7913349fef87c556595e73 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 1ec7fb81435da8aa1e191290051d380362950424..4fa38c3bb3cb21f6cfc17339c4dcac217f8015dd 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 23c4c55a961fba055dd01832e1b037d770d7454e..a273225ad2f3f1815cac1529de39e6d8fddab1dc 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 a4a7b8363100da4cb9b42b2d6e85a65cf6b3ae39..8fc03d2bb2746a7a8baf2ad283a571a5fc22d3fa 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 ee9b0a2e27006f924780a9b08d36d26bc09b5faf..b3a14dec07829db5f86efe00bb68d5b5d4afeb0c 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 a4a7b8363100da4cb9b42b2d6e85a65cf6b3ae39..8fc03d2bb2746a7a8baf2ad283a571a5fc22d3fa 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();