From 772e2b9dabb94d3ba4f1a622c02f7c8ae0a9f97a Mon Sep 17 00:00:00 2001 From: Zhelyazko Chobantonov Date: Tue, 18 Jun 2019 18:22:36 -0400 Subject: [PATCH 1/5] UpdateValve should be installed only once, remove MessageListener from topic when SessionManager stopInternal is invoked #2178 --- .../tomcat/RedissonSessionManager.java | 40 ++++++++++++++----- .../java/org/redisson/tomcat/UpdateValve.java | 10 +++-- .../tomcat/RedissonSessionManager.java | 40 ++++++++++++++----- .../java/org/redisson/tomcat/UpdateValve.java | 10 +++-- .../tomcat/RedissonSessionManager.java | 40 ++++++++++++++----- .../java/org/redisson/tomcat/UpdateValve.java | 10 +++-- .../tomcat/RedissonSessionManager.java | 40 ++++++++++++++----- .../java/org/redisson/tomcat/UpdateValve.java | 10 +++-- 8 files changed, 148 insertions(+), 52 deletions(-) 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 431e6a66c..06e6bf8d5 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 @@ -17,10 +17,13 @@ package org.redisson.tomcat; import java.io.File; import java.io.IOException; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import javax.servlet.http.HttpSession; @@ -71,8 +74,12 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { private final String nodeId = UUID.randomUUID().toString(); - private UpdateValve updateValve; + private static UpdateValve updateValve; + private static Set contextWithInstalledValves = Collections.newSetFromMap(new ConcurrentHashMap()); + + private MessageListener messageListener; + private Codec codecToUse; public String getNodeId() { return nodeId; } @@ -271,16 +278,17 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { if (updateMode == UpdateMode.AFTER_REQUEST) { Pipeline pipeline = getEngine().getPipeline(); - if (updateValve != null) { // in case startInternal is called without stopInternal cleaning the updateValve - pipeline.removeValve(updateValve); + synchronized (pipeline) { + contextWithInstalledValves.add(((Context) getContainer()).getName()); + + updateValve = new UpdateValve(); + pipeline.addValve(updateValve); } - updateValve = new UpdateValve(this); - pipeline.addValve(updateValve); } if (readMode == ReadMode.MEMORY || broadcastSessionEvents) { RTopic updatesTopic = getTopic(); - updatesTopic.addListener(AttributeMessage.class, new MessageListener() { + messageListener = new MessageListener() { @Override public void onMessage(CharSequence channel, AttributeMessage msg) { @@ -338,7 +346,9 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { log.error("Unable to handle topic message", e); } } - }); + }; + + updatesTopic.addListener(AttributeMessage.class, messageListener); } lifecycle.fireLifecycleEvent(START_EVENT, null); @@ -368,8 +378,20 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { @Override public void stop() throws LifecycleException { if (updateValve != null) { - getEngine().getPipeline().removeValve(updateValve); - updateValve = null; + Pipeline pipeline = getEngine().getPipeline(); + synchronized (pipeline) { + contextWithInstalledValves.remove(((Context) getContainer()).getName()); + //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore + if (contextWithInstalledValves.size() == 0) { + pipeline.removeValve(updateValve); + updateValve = null; + } + } + } + + if (messageListener != null) { + RTopic updatesTopic = getTopic(); + updatesTopic.removeListener(messageListener); } codecToUse = null; diff --git a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/UpdateValve.java b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/UpdateValve.java index 26d4a82ad..d36c7dc5a 100644 --- a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/UpdateValve.java +++ b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/UpdateValve.java @@ -19,6 +19,7 @@ import java.io.IOException; import javax.servlet.ServletException; +import org.apache.catalina.Manager; import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; import org.apache.catalina.valves.ValveBase; @@ -32,11 +33,9 @@ import org.apache.catalina.valves.ValveBase; public class UpdateValve extends ValveBase { private static final String ALREADY_FILTERED_NOTE = UpdateValve.class.getName() + ".ALREADY_FILTERED_NOTE"; - private final RedissonSessionManager manager; - public UpdateValve(RedissonSessionManager manager) { + public UpdateValve() { super(); - this.manager = manager; } @Override @@ -52,7 +51,10 @@ public class UpdateValve extends ValveBase { try { ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader(); Thread.currentThread().setContextClassLoader(applicationClassLoader); - manager.store(request.getSession(false)); + Manager manager = request.getContext().getManager(); + if (manager instanceof RedissonSessionManager) { + ((RedissonSessionManager)manager).store(request.getSession(false)); + } } finally { Thread.currentThread().setContextClassLoader(classLoader); } 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 33f4ed3da..754668cea 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 @@ -17,9 +17,12 @@ package org.redisson.tomcat; import java.io.File; import java.io.IOException; +import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import javax.servlet.http.HttpSession; @@ -68,8 +71,12 @@ public class RedissonSessionManager extends ManagerBase { private final String nodeId = UUID.randomUUID().toString(); - private UpdateValve updateValve; + private static UpdateValve updateValve; + private static Set contextWithInstalledValves = Collections.newSetFromMap(new ConcurrentHashMap()); + + private MessageListener messageListener; + private Codec codecToUse; public String getNodeId() { return nodeId; } @@ -251,16 +258,17 @@ public class RedissonSessionManager extends ManagerBase { if (updateMode == UpdateMode.AFTER_REQUEST) { Pipeline pipeline = getEngine().getPipeline(); - if (updateValve != null) { // in case startInternal is called without stopInternal cleaning the updateValve - pipeline.removeValve(updateValve); + synchronized (pipeline) { + contextWithInstalledValves.add(((Context) getContainer()).getName()); + + updateValve = new UpdateValve(); + pipeline.addValve(updateValve); } - updateValve = new UpdateValve(this); - pipeline.addValve(updateValve); } if (readMode == ReadMode.MEMORY || broadcastSessionEvents) { RTopic updatesTopic = getTopic(); - updatesTopic.addListener(AttributeMessage.class, new MessageListener() { + messageListener = new MessageListener() { @Override public void onMessage(CharSequence channel, AttributeMessage msg) { @@ -319,7 +327,9 @@ public class RedissonSessionManager extends ManagerBase { log.error("Unable to handle topic message", e); } } - }); + }; + + updatesTopic.addListener(AttributeMessage.class, messageListener); } setState(LifecycleState.STARTING); @@ -353,8 +363,20 @@ public class RedissonSessionManager extends ManagerBase { setState(LifecycleState.STOPPING); if (updateValve != null) { - getEngine().getPipeline().removeValve(updateValve); - updateValve = null; + Pipeline pipeline = getEngine().getPipeline(); + synchronized (pipeline) { + contextWithInstalledValves.remove(((Context) getContainer()).getName()); + //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore + if (contextWithInstalledValves.size() == 0) { + pipeline.removeValve(updateValve); + updateValve = null; + } + } + } + + if (messageListener != null) { + RTopic updatesTopic = getTopic(); + updatesTopic.removeListener(messageListener); } codecToUse = null; diff --git a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/UpdateValve.java b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/UpdateValve.java index 4aef9ed77..e947dbe95 100644 --- a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/UpdateValve.java +++ b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/UpdateValve.java @@ -19,6 +19,7 @@ import java.io.IOException; import javax.servlet.ServletException; +import org.apache.catalina.Manager; import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; import org.apache.catalina.valves.ValveBase; @@ -32,11 +33,9 @@ import org.apache.catalina.valves.ValveBase; public class UpdateValve extends ValveBase { private static final String ALREADY_FILTERED_NOTE = UpdateValve.class.getName() + ".ALREADY_FILTERED_NOTE"; - private final RedissonSessionManager manager; - public UpdateValve(RedissonSessionManager manager) { + public UpdateValve() { super(true); - this.manager = manager; } @Override @@ -52,7 +51,10 @@ public class UpdateValve extends ValveBase { try { ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader(); Thread.currentThread().setContextClassLoader(applicationClassLoader); - manager.store(request.getSession(false)); + Manager manager = request.getContext().getManager(); + if (manager instanceof RedissonSessionManager) { + ((RedissonSessionManager)manager).store(request.getSession(false)); + } } finally { Thread.currentThread().setContextClassLoader(classLoader); } 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 dba307955..1d5d96d68 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 @@ -17,9 +17,12 @@ package org.redisson.tomcat; import java.io.File; import java.io.IOException; +import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import javax.servlet.http.HttpSession; @@ -67,8 +70,12 @@ public class RedissonSessionManager extends ManagerBase { private final String nodeId = UUID.randomUUID().toString(); - private UpdateValve updateValve; + private static UpdateValve updateValve; + private static Set contextWithInstalledValves = Collections.newSetFromMap(new ConcurrentHashMap()); + + private MessageListener messageListener; + private Codec codecToUse; public String getNodeId() { return nodeId; } @@ -249,16 +256,17 @@ public class RedissonSessionManager extends ManagerBase { if (updateMode == UpdateMode.AFTER_REQUEST) { Pipeline pipeline = getEngine().getPipeline(); - if (updateValve != null) { // in case startInternal is called without stopInternal cleaning the updateValve - pipeline.removeValve(updateValve); + synchronized (pipeline) { + contextWithInstalledValves.add(getContext().getName()); + + updateValve = new UpdateValve(); + pipeline.addValve(updateValve); } - updateValve = new UpdateValve(this); - pipeline.addValve(updateValve); } if (readMode == ReadMode.MEMORY || broadcastSessionEvents) { RTopic updatesTopic = getTopic(); - updatesTopic.addListener(AttributeMessage.class, new MessageListener() { + messageListener = new MessageListener() { @Override public void onMessage(CharSequence channel, AttributeMessage msg) { @@ -317,7 +325,9 @@ public class RedissonSessionManager extends ManagerBase { log.error("Unable to handle topic message", e); } } - }); + }; + + updatesTopic.addListener(AttributeMessage.class, messageListener); } setState(LifecycleState.STARTING); @@ -351,8 +361,20 @@ public class RedissonSessionManager extends ManagerBase { setState(LifecycleState.STOPPING); if (updateValve != null) { - getEngine().getPipeline().removeValve(updateValve); - updateValve = null; + Pipeline pipeline = getEngine().getPipeline(); + synchronized (pipeline) { + contextWithInstalledValves.remove(getContext().getName()); + //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore + if (contextWithInstalledValves.size() == 0) { + pipeline.removeValve(updateValve); + updateValve = null; + } + } + } + + if (messageListener != null) { + RTopic updatesTopic = getTopic(); + updatesTopic.removeListener(messageListener); } codecToUse = null; diff --git a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/UpdateValve.java b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/UpdateValve.java index 4aef9ed77..e947dbe95 100644 --- a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/UpdateValve.java +++ b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/UpdateValve.java @@ -19,6 +19,7 @@ import java.io.IOException; import javax.servlet.ServletException; +import org.apache.catalina.Manager; import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; import org.apache.catalina.valves.ValveBase; @@ -32,11 +33,9 @@ import org.apache.catalina.valves.ValveBase; public class UpdateValve extends ValveBase { private static final String ALREADY_FILTERED_NOTE = UpdateValve.class.getName() + ".ALREADY_FILTERED_NOTE"; - private final RedissonSessionManager manager; - public UpdateValve(RedissonSessionManager manager) { + public UpdateValve() { super(true); - this.manager = manager; } @Override @@ -52,7 +51,10 @@ public class UpdateValve extends ValveBase { try { ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader(); Thread.currentThread().setContextClassLoader(applicationClassLoader); - manager.store(request.getSession(false)); + Manager manager = request.getContext().getManager(); + if (manager instanceof RedissonSessionManager) { + ((RedissonSessionManager)manager).store(request.getSession(false)); + } } finally { Thread.currentThread().setContextClassLoader(classLoader); } 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 dba307955..1d5d96d68 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 @@ -17,9 +17,12 @@ package org.redisson.tomcat; import java.io.File; import java.io.IOException; +import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import javax.servlet.http.HttpSession; @@ -67,8 +70,12 @@ public class RedissonSessionManager extends ManagerBase { private final String nodeId = UUID.randomUUID().toString(); - private UpdateValve updateValve; + private static UpdateValve updateValve; + private static Set contextWithInstalledValves = Collections.newSetFromMap(new ConcurrentHashMap()); + + private MessageListener messageListener; + private Codec codecToUse; public String getNodeId() { return nodeId; } @@ -249,16 +256,17 @@ public class RedissonSessionManager extends ManagerBase { if (updateMode == UpdateMode.AFTER_REQUEST) { Pipeline pipeline = getEngine().getPipeline(); - if (updateValve != null) { // in case startInternal is called without stopInternal cleaning the updateValve - pipeline.removeValve(updateValve); + synchronized (pipeline) { + contextWithInstalledValves.add(getContext().getName()); + + updateValve = new UpdateValve(); + pipeline.addValve(updateValve); } - updateValve = new UpdateValve(this); - pipeline.addValve(updateValve); } if (readMode == ReadMode.MEMORY || broadcastSessionEvents) { RTopic updatesTopic = getTopic(); - updatesTopic.addListener(AttributeMessage.class, new MessageListener() { + messageListener = new MessageListener() { @Override public void onMessage(CharSequence channel, AttributeMessage msg) { @@ -317,7 +325,9 @@ public class RedissonSessionManager extends ManagerBase { log.error("Unable to handle topic message", e); } } - }); + }; + + updatesTopic.addListener(AttributeMessage.class, messageListener); } setState(LifecycleState.STARTING); @@ -351,8 +361,20 @@ public class RedissonSessionManager extends ManagerBase { setState(LifecycleState.STOPPING); if (updateValve != null) { - getEngine().getPipeline().removeValve(updateValve); - updateValve = null; + Pipeline pipeline = getEngine().getPipeline(); + synchronized (pipeline) { + contextWithInstalledValves.remove(getContext().getName()); + //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore + if (contextWithInstalledValves.size() == 0) { + pipeline.removeValve(updateValve); + updateValve = null; + } + } + } + + if (messageListener != null) { + RTopic updatesTopic = getTopic(); + updatesTopic.removeListener(messageListener); } codecToUse = null; diff --git a/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/UpdateValve.java b/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/UpdateValve.java index 4aef9ed77..e947dbe95 100644 --- a/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/UpdateValve.java +++ b/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/UpdateValve.java @@ -19,6 +19,7 @@ import java.io.IOException; import javax.servlet.ServletException; +import org.apache.catalina.Manager; import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; import org.apache.catalina.valves.ValveBase; @@ -32,11 +33,9 @@ import org.apache.catalina.valves.ValveBase; public class UpdateValve extends ValveBase { private static final String ALREADY_FILTERED_NOTE = UpdateValve.class.getName() + ".ALREADY_FILTERED_NOTE"; - private final RedissonSessionManager manager; - public UpdateValve(RedissonSessionManager manager) { + public UpdateValve() { super(true); - this.manager = manager; } @Override @@ -52,7 +51,10 @@ public class UpdateValve extends ValveBase { try { ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader(); Thread.currentThread().setContextClassLoader(applicationClassLoader); - manager.store(request.getSession(false)); + Manager manager = request.getContext().getManager(); + if (manager instanceof RedissonSessionManager) { + ((RedissonSessionManager)manager).store(request.getSession(false)); + } } finally { Thread.currentThread().setContextClassLoader(classLoader); } From 77055134c212d0839a7cdb6ba1e8199ac72226cf Mon Sep 17 00:00:00 2001 From: Zhelyazko Chobantonov Date: Tue, 18 Jun 2019 18:33:46 -0400 Subject: [PATCH 2/5] initialize updateValve only once --- .../tomcat/RedissonSessionManager.java | 39 ++++++++++--------- .../tomcat/RedissonSessionManager.java | 39 ++++++++++--------- .../tomcat/RedissonSessionManager.java | 39 ++++++++++--------- .../tomcat/RedissonSessionManager.java | 39 ++++++++++--------- 4 files changed, 80 insertions(+), 76 deletions(-) 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 06e6bf8d5..acc235946 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 @@ -76,7 +76,7 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { private static UpdateValve updateValve; - private static Set contextWithInstalledValves = Collections.newSetFromMap(new ConcurrentHashMap()); + private static Set contextInUse = Collections.newSetFromMap(new ConcurrentHashMap()); private MessageListener messageListener; @@ -276,15 +276,16 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { throw new LifecycleException(e); } - if (updateMode == UpdateMode.AFTER_REQUEST) { - Pipeline pipeline = getEngine().getPipeline(); - synchronized (pipeline) { - contextWithInstalledValves.add(((Context) getContainer()).getName()); - - updateValve = new UpdateValve(); - pipeline.addValve(updateValve); - } - } + Pipeline pipeline = getEngine().getPipeline(); + synchronized (pipeline) { + contextInUse.add(((Context) getContainer()).getName()); + if (updateMode == UpdateMode.AFTER_REQUEST) { + if (updateValve == null) { + updateValve = new UpdateValve(); + pipeline.addValve(updateValve); + } + } + } if (readMode == ReadMode.MEMORY || broadcastSessionEvents) { RTopic updatesTopic = getTopic(); @@ -377,16 +378,16 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { @Override public void stop() throws LifecycleException { - if (updateValve != null) { - Pipeline pipeline = getEngine().getPipeline(); - synchronized (pipeline) { - contextWithInstalledValves.remove(((Context) getContainer()).getName()); - //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore - if (contextWithInstalledValves.size() == 0) { - pipeline.removeValve(updateValve); + Pipeline pipeline = getEngine().getPipeline(); + synchronized (pipeline) { + contextInUse.remove(((Context) getContainer()).getName()); + //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore + if (contextInUse.size() == 0) { + if (updateValve != null) { + pipeline.removeValve(updateValve); updateValve = null; - } - } + } + } } if (messageListener != null) { 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 754668cea..5526f46a5 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 @@ -73,7 +73,7 @@ public class RedissonSessionManager extends ManagerBase { private static UpdateValve updateValve; - private static Set contextWithInstalledValves = Collections.newSetFromMap(new ConcurrentHashMap()); + private static Set contextInUse = Collections.newSetFromMap(new ConcurrentHashMap()); private MessageListener messageListener; @@ -256,15 +256,16 @@ public class RedissonSessionManager extends ManagerBase { throw new LifecycleException(e); } - if (updateMode == UpdateMode.AFTER_REQUEST) { - Pipeline pipeline = getEngine().getPipeline(); - synchronized (pipeline) { - contextWithInstalledValves.add(((Context) getContainer()).getName()); - - updateValve = new UpdateValve(); - pipeline.addValve(updateValve); - } - } + Pipeline pipeline = getEngine().getPipeline(); + synchronized (pipeline) { + contextInUse.add(((Context) getContainer()).getName()); + if (updateMode == UpdateMode.AFTER_REQUEST) { + if (updateValve == null) { + updateValve = new UpdateValve(); + pipeline.addValve(updateValve); + } + } + } if (readMode == ReadMode.MEMORY || broadcastSessionEvents) { RTopic updatesTopic = getTopic(); @@ -362,16 +363,16 @@ public class RedissonSessionManager extends ManagerBase { setState(LifecycleState.STOPPING); - if (updateValve != null) { - Pipeline pipeline = getEngine().getPipeline(); - synchronized (pipeline) { - contextWithInstalledValves.remove(((Context) getContainer()).getName()); - //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore - if (contextWithInstalledValves.size() == 0) { - pipeline.removeValve(updateValve); + Pipeline pipeline = getEngine().getPipeline(); + synchronized (pipeline) { + contextInUse.remove(((Context) getContainer()).getName()); + //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore + if (contextInUse.size() == 0) { + if (updateValve != null) { + pipeline.removeValve(updateValve); updateValve = null; - } - } + } + } } if (messageListener != null) { 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 1d5d96d68..30b35fcea 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 @@ -72,7 +72,7 @@ public class RedissonSessionManager extends ManagerBase { private static UpdateValve updateValve; - private static Set contextWithInstalledValves = Collections.newSetFromMap(new ConcurrentHashMap()); + private static Set contextInUse = Collections.newSetFromMap(new ConcurrentHashMap()); private MessageListener messageListener; @@ -254,15 +254,16 @@ public class RedissonSessionManager extends ManagerBase { throw new LifecycleException(e); } - if (updateMode == UpdateMode.AFTER_REQUEST) { - Pipeline pipeline = getEngine().getPipeline(); - synchronized (pipeline) { - contextWithInstalledValves.add(getContext().getName()); - - updateValve = new UpdateValve(); - pipeline.addValve(updateValve); - } - } + Pipeline pipeline = getEngine().getPipeline(); + synchronized (pipeline) { + contextInUse.add(getContext().getName()); + if (updateMode == UpdateMode.AFTER_REQUEST) { + if (updateValve == null) { + updateValve = new UpdateValve(); + pipeline.addValve(updateValve); + } + } + } if (readMode == ReadMode.MEMORY || broadcastSessionEvents) { RTopic updatesTopic = getTopic(); @@ -360,16 +361,16 @@ public class RedissonSessionManager extends ManagerBase { setState(LifecycleState.STOPPING); - if (updateValve != null) { - Pipeline pipeline = getEngine().getPipeline(); - synchronized (pipeline) { - contextWithInstalledValves.remove(getContext().getName()); - //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore - if (contextWithInstalledValves.size() == 0) { - pipeline.removeValve(updateValve); + Pipeline pipeline = getEngine().getPipeline(); + synchronized (pipeline) { + contextInUse.remove(getContext().getName()); + //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore + if (contextInUse.size() == 0) { + if (updateValve != null) { + pipeline.removeValve(updateValve); updateValve = null; - } - } + } + } } if (messageListener != null) { 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 1d5d96d68..30b35fcea 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 @@ -72,7 +72,7 @@ public class RedissonSessionManager extends ManagerBase { private static UpdateValve updateValve; - private static Set contextWithInstalledValves = Collections.newSetFromMap(new ConcurrentHashMap()); + private static Set contextInUse = Collections.newSetFromMap(new ConcurrentHashMap()); private MessageListener messageListener; @@ -254,15 +254,16 @@ public class RedissonSessionManager extends ManagerBase { throw new LifecycleException(e); } - if (updateMode == UpdateMode.AFTER_REQUEST) { - Pipeline pipeline = getEngine().getPipeline(); - synchronized (pipeline) { - contextWithInstalledValves.add(getContext().getName()); - - updateValve = new UpdateValve(); - pipeline.addValve(updateValve); - } - } + Pipeline pipeline = getEngine().getPipeline(); + synchronized (pipeline) { + contextInUse.add(getContext().getName()); + if (updateMode == UpdateMode.AFTER_REQUEST) { + if (updateValve == null) { + updateValve = new UpdateValve(); + pipeline.addValve(updateValve); + } + } + } if (readMode == ReadMode.MEMORY || broadcastSessionEvents) { RTopic updatesTopic = getTopic(); @@ -360,16 +361,16 @@ public class RedissonSessionManager extends ManagerBase { setState(LifecycleState.STOPPING); - if (updateValve != null) { - Pipeline pipeline = getEngine().getPipeline(); - synchronized (pipeline) { - contextWithInstalledValves.remove(getContext().getName()); - //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore - if (contextWithInstalledValves.size() == 0) { - pipeline.removeValve(updateValve); + Pipeline pipeline = getEngine().getPipeline(); + synchronized (pipeline) { + contextInUse.remove(getContext().getName()); + //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore + if (contextInUse.size() == 0) { + if (updateValve != null) { + pipeline.removeValve(updateValve); updateValve = null; - } - } + } + } } if (messageListener != null) { From 22c1332e29caf03d3f69df15382974baf348ae4a Mon Sep 17 00:00:00 2001 From: Zhelyazko Chobantonov Date: Tue, 18 Jun 2019 18:38:56 -0400 Subject: [PATCH 3/5] format --- .../tomcat/RedissonSessionManager.java | 32 +++++++++---------- .../tomcat/RedissonSessionManager.java | 32 +++++++++---------- .../tomcat/RedissonSessionManager.java | 32 +++++++++---------- .../tomcat/RedissonSessionManager.java | 32 +++++++++---------- 4 files changed, 64 insertions(+), 64 deletions(-) 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 acc235946..59758b59a 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 @@ -279,13 +279,13 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { Pipeline pipeline = getEngine().getPipeline(); synchronized (pipeline) { contextInUse.add(((Context) getContainer()).getName()); - if (updateMode == UpdateMode.AFTER_REQUEST) { - if (updateValve == null) { - updateValve = new UpdateValve(); - pipeline.addValve(updateValve); - } - } - } + if (updateMode == UpdateMode.AFTER_REQUEST) { + if (updateValve == null) { + updateValve = new UpdateValve(); + pipeline.addValve(updateValve); + } + } + } if (readMode == ReadMode.MEMORY || broadcastSessionEvents) { RTopic updatesTopic = getTopic(); @@ -381,18 +381,18 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { Pipeline pipeline = getEngine().getPipeline(); synchronized (pipeline) { contextInUse.remove(((Context) getContainer()).getName()); - //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore - if (contextInUse.size() == 0) { - if (updateValve != null) { - pipeline.removeValve(updateValve); - updateValve = null; - } - } + //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore + if (contextInUse.size() == 0) { + if (updateValve != null) { + pipeline.removeValve(updateValve); + updateValve = null; + } + } } if (messageListener != null) { - RTopic updatesTopic = getTopic(); - updatesTopic.removeListener(messageListener); + RTopic updatesTopic = getTopic(); + updatesTopic.removeListener(messageListener); } codecToUse = null; 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 5526f46a5..c9df9ab0b 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 @@ -259,13 +259,13 @@ public class RedissonSessionManager extends ManagerBase { Pipeline pipeline = getEngine().getPipeline(); synchronized (pipeline) { contextInUse.add(((Context) getContainer()).getName()); - if (updateMode == UpdateMode.AFTER_REQUEST) { - if (updateValve == null) { - updateValve = new UpdateValve(); - pipeline.addValve(updateValve); - } - } - } + if (updateMode == UpdateMode.AFTER_REQUEST) { + if (updateValve == null) { + updateValve = new UpdateValve(); + pipeline.addValve(updateValve); + } + } + } if (readMode == ReadMode.MEMORY || broadcastSessionEvents) { RTopic updatesTopic = getTopic(); @@ -366,18 +366,18 @@ public class RedissonSessionManager extends ManagerBase { Pipeline pipeline = getEngine().getPipeline(); synchronized (pipeline) { contextInUse.remove(((Context) getContainer()).getName()); - //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore - if (contextInUse.size() == 0) { - if (updateValve != null) { - pipeline.removeValve(updateValve); - updateValve = null; - } - } + //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore + if (contextInUse.size() == 0) { + if (updateValve != null) { + pipeline.removeValve(updateValve); + updateValve = null; + } + } } if (messageListener != null) { - RTopic updatesTopic = getTopic(); - updatesTopic.removeListener(messageListener); + RTopic updatesTopic = getTopic(); + updatesTopic.removeListener(messageListener); } codecToUse = null; 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 30b35fcea..58ca28439 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 @@ -257,13 +257,13 @@ public class RedissonSessionManager extends ManagerBase { Pipeline pipeline = getEngine().getPipeline(); synchronized (pipeline) { contextInUse.add(getContext().getName()); - if (updateMode == UpdateMode.AFTER_REQUEST) { - if (updateValve == null) { - updateValve = new UpdateValve(); - pipeline.addValve(updateValve); - } - } - } + if (updateMode == UpdateMode.AFTER_REQUEST) { + if (updateValve == null) { + updateValve = new UpdateValve(); + pipeline.addValve(updateValve); + } + } + } if (readMode == ReadMode.MEMORY || broadcastSessionEvents) { RTopic updatesTopic = getTopic(); @@ -364,18 +364,18 @@ public class RedissonSessionManager extends ManagerBase { Pipeline pipeline = getEngine().getPipeline(); synchronized (pipeline) { contextInUse.remove(getContext().getName()); - //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore - if (contextInUse.size() == 0) { - if (updateValve != null) { - pipeline.removeValve(updateValve); - updateValve = null; - } - } + //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore + if (contextInUse.size() == 0) { + if (updateValve != null) { + pipeline.removeValve(updateValve); + updateValve = null; + } + } } if (messageListener != null) { - RTopic updatesTopic = getTopic(); - updatesTopic.removeListener(messageListener); + RTopic updatesTopic = getTopic(); + updatesTopic.removeListener(messageListener); } codecToUse = null; 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 30b35fcea..58ca28439 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 @@ -257,13 +257,13 @@ public class RedissonSessionManager extends ManagerBase { Pipeline pipeline = getEngine().getPipeline(); synchronized (pipeline) { contextInUse.add(getContext().getName()); - if (updateMode == UpdateMode.AFTER_REQUEST) { - if (updateValve == null) { - updateValve = new UpdateValve(); - pipeline.addValve(updateValve); - } - } - } + if (updateMode == UpdateMode.AFTER_REQUEST) { + if (updateValve == null) { + updateValve = new UpdateValve(); + pipeline.addValve(updateValve); + } + } + } if (readMode == ReadMode.MEMORY || broadcastSessionEvents) { RTopic updatesTopic = getTopic(); @@ -364,18 +364,18 @@ public class RedissonSessionManager extends ManagerBase { Pipeline pipeline = getEngine().getPipeline(); synchronized (pipeline) { contextInUse.remove(getContext().getName()); - //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore - if (contextInUse.size() == 0) { - if (updateValve != null) { - pipeline.removeValve(updateValve); - updateValve = null; - } - } + //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore + if (contextInUse.size() == 0) { + if (updateValve != null) { + pipeline.removeValve(updateValve); + updateValve = null; + } + } } if (messageListener != null) { - RTopic updatesTopic = getTopic(); - updatesTopic.removeListener(messageListener); + RTopic updatesTopic = getTopic(); + updatesTopic.removeListener(messageListener); } codecToUse = null; From 442d00b180606431fcb8be8aff2aea29e62d6fdb Mon Sep 17 00:00:00 2001 From: Zhelyazko Chobantonov Date: Wed, 19 Jun 2019 15:53:34 -0400 Subject: [PATCH 4/5] use isEmpty() --- .../main/java/org/redisson/tomcat/RedissonSessionManager.java | 2 +- .../main/java/org/redisson/tomcat/RedissonSessionManager.java | 2 +- .../main/java/org/redisson/tomcat/RedissonSessionManager.java | 2 +- .../main/java/org/redisson/tomcat/RedissonSessionManager.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) 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 59758b59a..f26b8999c 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 @@ -382,7 +382,7 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { synchronized (pipeline) { contextInUse.remove(((Context) getContainer()).getName()); //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore - if (contextInUse.size() == 0) { + if (contextInUse.isEmpty()) { if (updateValve != null) { pipeline.removeValve(updateValve); updateValve = null; 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 c9df9ab0b..6a16fde13 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 @@ -367,7 +367,7 @@ public class RedissonSessionManager extends ManagerBase { synchronized (pipeline) { contextInUse.remove(((Context) getContainer()).getName()); //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore - if (contextInUse.size() == 0) { + if (contextInUse.isEmpty()) { if (updateValve != null) { pipeline.removeValve(updateValve); updateValve = null; 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 58ca28439..27d9fa7aa 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 @@ -365,7 +365,7 @@ public class RedissonSessionManager extends ManagerBase { synchronized (pipeline) { contextInUse.remove(getContext().getName()); //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore - if (contextInUse.size() == 0) { + if (contextInUse.isEmpty()) { if (updateValve != null) { pipeline.removeValve(updateValve); updateValve = null; 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 58ca28439..27d9fa7aa 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 @@ -365,7 +365,7 @@ public class RedissonSessionManager extends ManagerBase { synchronized (pipeline) { contextInUse.remove(getContext().getName()); //remove valves when all of the RedissonSessionManagers (web apps) are not in use anymore - if (contextInUse.size() == 0) { + if (contextInUse.isEmpty()) { if (updateValve != null) { pipeline.removeValve(updateValve); updateValve = null; From 90fe8687a684cdceb686c5924859fef82afb4442 Mon Sep 17 00:00:00 2001 From: Zhelyazko Chobantonov Date: Wed, 19 Jun 2019 15:56:59 -0400 Subject: [PATCH 5/5] do not check for instanceof RedissonSessionManager --- .../src/main/java/org/redisson/tomcat/UpdateValve.java | 4 +--- .../src/main/java/org/redisson/tomcat/UpdateValve.java | 4 +--- .../src/main/java/org/redisson/tomcat/UpdateValve.java | 4 +--- .../src/main/java/org/redisson/tomcat/UpdateValve.java | 4 +--- 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/UpdateValve.java b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/UpdateValve.java index d36c7dc5a..8d93b7773 100644 --- a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/UpdateValve.java +++ b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/UpdateValve.java @@ -52,9 +52,7 @@ public class UpdateValve extends ValveBase { ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader(); Thread.currentThread().setContextClassLoader(applicationClassLoader); Manager manager = request.getContext().getManager(); - if (manager instanceof RedissonSessionManager) { - ((RedissonSessionManager)manager).store(request.getSession(false)); - } + ((RedissonSessionManager)manager).store(request.getSession(false)); } finally { Thread.currentThread().setContextClassLoader(classLoader); } diff --git a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/UpdateValve.java b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/UpdateValve.java index e947dbe95..bad105f88 100644 --- a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/UpdateValve.java +++ b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/UpdateValve.java @@ -52,9 +52,7 @@ public class UpdateValve extends ValveBase { ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader(); Thread.currentThread().setContextClassLoader(applicationClassLoader); Manager manager = request.getContext().getManager(); - if (manager instanceof RedissonSessionManager) { - ((RedissonSessionManager)manager).store(request.getSession(false)); - } + ((RedissonSessionManager)manager).store(request.getSession(false)); } finally { Thread.currentThread().setContextClassLoader(classLoader); } diff --git a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/UpdateValve.java b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/UpdateValve.java index e947dbe95..bad105f88 100644 --- a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/UpdateValve.java +++ b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/UpdateValve.java @@ -52,9 +52,7 @@ public class UpdateValve extends ValveBase { ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader(); Thread.currentThread().setContextClassLoader(applicationClassLoader); Manager manager = request.getContext().getManager(); - if (manager instanceof RedissonSessionManager) { - ((RedissonSessionManager)manager).store(request.getSession(false)); - } + ((RedissonSessionManager)manager).store(request.getSession(false)); } finally { Thread.currentThread().setContextClassLoader(classLoader); } diff --git a/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/UpdateValve.java b/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/UpdateValve.java index e947dbe95..bad105f88 100644 --- a/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/UpdateValve.java +++ b/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/UpdateValve.java @@ -52,9 +52,7 @@ public class UpdateValve extends ValveBase { ClassLoader applicationClassLoader = request.getContext().getLoader().getClassLoader(); Thread.currentThread().setContextClassLoader(applicationClassLoader); Manager manager = request.getContext().getManager(); - if (manager instanceof RedissonSessionManager) { - ((RedissonSessionManager)manager).store(request.getSession(false)); - } + ((RedissonSessionManager)manager).store(request.getSession(false)); } finally { Thread.currentThread().setContextClassLoader(classLoader); }