From b573eadd80fa8969b56fa9400e1458af6dbacc10 Mon Sep 17 00:00:00 2001 From: Nikita Date: Fri, 11 Aug 2017 11:19:08 +0300 Subject: [PATCH] Added readMode property for RedissonSessionManager #974 --- .../java/org/redisson/tomcat/RedissonSession.java | 14 +++++++++++++- .../redisson/tomcat/RedissonSessionManager.java | 13 ++++++++++++- .../java/org/redisson/tomcat/RedissonSession.java | 14 +++++++++++++- .../redisson/tomcat/RedissonSessionManager.java | 13 ++++++++++++- .../java/org/redisson/tomcat/RedissonSession.java | 15 ++++++++++++++- .../redisson/tomcat/RedissonSessionManager.java | 14 +++++++++++++- 6 files changed, 77 insertions(+), 6 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 930cc6adb..e59905564 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 @@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit; import org.apache.catalina.session.StandardSession; import org.redisson.api.RMap; +import org.redisson.tomcat.RedissonSessionManager.ReadMode; /** * Redisson Session object for Apache Tomcat @@ -35,10 +36,12 @@ public class RedissonSession extends StandardSession { private final RedissonSessionManager redissonManager; private final Map attrs; private RMap map; + private final RedissonSessionManager.ReadMode readMode; - public RedissonSession(RedissonSessionManager manager) { + public RedissonSession(RedissonSessionManager manager, RedissonSessionManager.ReadMode readMode) { super(manager); this.redissonManager = manager; + this.readMode = readMode; try { Field attr = StandardSession.class.getDeclaredField("attributes"); @@ -50,6 +53,15 @@ public class RedissonSession extends StandardSession { private static final long serialVersionUID = -2518607181636076487L; + @Override + public Object getAttribute(String name) { + if (readMode == ReadMode.REDIS) { + return map.get(name); + } + + return super.getAttribute(name); + } + @Override public void setId(String id, boolean notify) { super.setId(id, notify); 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 a0abf7ec7..07cc4f5ea 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 @@ -41,13 +41,24 @@ import org.redisson.config.Config; */ public class RedissonSessionManager extends ManagerBase implements Lifecycle { + public enum ReadMode {REDIS, MEMORY} + private final Log log = LogFactory.getLog(RedissonSessionManager.class); protected LifecycleSupport lifecycle = new LifecycleSupport(this); private RedissonClient redisson; private String configPath; + private ReadMode readMode = ReadMode.MEMORY; + public String getReadMode() { + return readMode.toString(); + } + + public void setReadMode(String readMode) { + this.readMode = ReadMode.valueOf(readMode); + } + public void setConfigPath(String configPath) { this.configPath = configPath; } @@ -135,7 +146,7 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { @Override public Session createEmptySession() { - return new RedissonSession(this); + return new RedissonSession(this, readMode); } @Override 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 3df3b6e03..b82004555 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 @@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit; import org.apache.catalina.session.StandardSession; import org.redisson.api.RMap; +import org.redisson.tomcat.RedissonSessionManager.ReadMode; /** * Redisson Session object for Apache Tomcat @@ -35,10 +36,12 @@ public class RedissonSession extends StandardSession { private final RedissonSessionManager redissonManager; private final Map attrs; private RMap map; + private final RedissonSessionManager.ReadMode readMode; - public RedissonSession(RedissonSessionManager manager) { + public RedissonSession(RedissonSessionManager manager, RedissonSessionManager.ReadMode readMode) { super(manager); this.redissonManager = manager; + this.readMode = readMode; try { Field attr = StandardSession.class.getDeclaredField("attributes"); attrs = (Map) attr.get(this); @@ -49,6 +52,15 @@ public class RedissonSession extends StandardSession { private static final long serialVersionUID = -2518607181636076487L; + @Override + public Object getAttribute(String name) { + if (readMode == ReadMode.REDIS) { + return map.get(name); + } + + return super.getAttribute(name); + } + @Override public void setId(String id, boolean notify) { super.setId(id, notify); 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 9fc57f0b7..2a53bb402 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 @@ -40,11 +40,22 @@ import org.redisson.config.Config; */ public class RedissonSessionManager extends ManagerBase { + public enum ReadMode {REDIS, MEMORY} + private final Log log = LogFactory.getLog(RedissonSessionManager.class); private RedissonClient redisson; private String configPath; + private ReadMode readMode = ReadMode.MEMORY; + public String getReadMode() { + return readMode.toString(); + } + + public void setReadMode(String readMode) { + this.readMode = ReadMode.valueOf(readMode); + } + public void setConfigPath(String configPath) { this.configPath = configPath; } @@ -113,7 +124,7 @@ public class RedissonSessionManager extends ManagerBase { @Override public Session createEmptySession() { - return new RedissonSession(this); + return new RedissonSession(this, readMode); } @Override 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 3df3b6e03..b0132f570 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 @@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit; import org.apache.catalina.session.StandardSession; import org.redisson.api.RMap; +import org.redisson.tomcat.RedissonSessionManager.ReadMode; /** * Redisson Session object for Apache Tomcat @@ -35,10 +36,13 @@ public class RedissonSession extends StandardSession { private final RedissonSessionManager redissonManager; private final Map attrs; private RMap map; + private final RedissonSessionManager.ReadMode readMode; - public RedissonSession(RedissonSessionManager manager) { + public RedissonSession(RedissonSessionManager manager, RedissonSessionManager.ReadMode readMode) { super(manager); this.redissonManager = manager; + this.readMode = readMode; + try { Field attr = StandardSession.class.getDeclaredField("attributes"); attrs = (Map) attr.get(this); @@ -49,6 +53,15 @@ public class RedissonSession extends StandardSession { private static final long serialVersionUID = -2518607181636076487L; + @Override + public Object getAttribute(String name) { + if (readMode == ReadMode.REDIS) { + return map.get(name); + } + + return super.getAttribute(name); + } + @Override public void setId(String id, boolean notify) { super.setId(id, notify); 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 dfa577e31..b16d6c075 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 @@ -39,11 +39,23 @@ import org.redisson.config.Config; */ public class RedissonSessionManager extends ManagerBase { + public enum ReadMode {REDIS, MEMORY} + private final Log log = LogFactory.getLog(RedissonSessionManager.class); private RedissonClient redisson; private String configPath; + private ReadMode readMode = ReadMode.MEMORY; + + public String getReadMode() { + return readMode.toString(); + } + + public void setReadMode(String readMode) { + this.readMode = ReadMode.valueOf(readMode); + } + public void setConfigPath(String configPath) { this.configPath = configPath; } @@ -112,7 +124,7 @@ public class RedissonSessionManager extends ManagerBase { @Override public Session createEmptySession() { - return new RedissonSession(this); + return new RedissonSession(this, readMode); } @Override