refactoring

pull/1821/head
Nikita
parent 24146f776b
commit c6269509c7

@ -16,9 +16,12 @@
package org.redisson.tomcat;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.catalina.session.StandardSession;
@ -35,6 +38,16 @@ import org.redisson.tomcat.RedissonSessionManager.UpdateMode;
*/
public class RedissonSession extends StandardSession {
private static final String IS_NEW_ATTR = "session:isNew";
private static final String IS_VALID_ATTR = "session:isValid";
private static final String THIS_ACCESSED_TIME_ATTR = "session:thisAccessedTime";
private static final String MAX_INACTIVE_INTERVAL_ATTR = "session:maxInactiveInterval";
private static final String LAST_ACCESSED_TIME_ATTR = "session:lastAccessedTime";
private static final String CREATION_TIME_ATTR = "session:creationTime";
public static final Set<String> ATTRS = new HashSet<String>(Arrays.asList(IS_NEW_ATTR, IS_VALID_ATTR,
THIS_ACCESSED_TIME_ATTR, MAX_INACTIVE_INTERVAL_ATTR, LAST_ACCESSED_TIME_ATTR, CREATION_TIME_ATTR));
private final RedissonSessionManager redissonManager;
private final Map<String, Object> attrs;
private RMap<String, Object> map;
@ -88,9 +101,9 @@ public class RedissonSession extends StandardSession {
if (map != null) {
Map<String, Object> newMap = new HashMap<String, Object>(3);
newMap.put("session:creationTime", creationTime);
newMap.put("session:lastAccessedTime", lastAccessedTime);
newMap.put("session:thisAccessedTime", thisAccessedTime);
newMap.put(CREATION_TIME_ATTR, creationTime);
newMap.put(LAST_ACCESSED_TIME_ATTR, lastAccessedTime);
newMap.put(THIS_ACCESSED_TIME_ATTR, thisAccessedTime);
map.putAll(newMap);
if (readMode == ReadMode.MEMORY) {
topic.publish(createPutAllMessage(newMap));
@ -104,8 +117,8 @@ public class RedissonSession extends StandardSession {
if (map != null) {
Map<String, Object> newMap = new HashMap<String, Object>(2);
newMap.put("session:lastAccessedTime", lastAccessedTime);
newMap.put("session:thisAccessedTime", thisAccessedTime);
newMap.put(LAST_ACCESSED_TIME_ATTR, lastAccessedTime);
newMap.put(THIS_ACCESSED_TIME_ATTR, thisAccessedTime);
map.putAll(newMap);
if (readMode == ReadMode.MEMORY) {
topic.publish(createPutAllMessage(newMap));
@ -129,7 +142,7 @@ public class RedissonSession extends StandardSession {
super.setMaxInactiveInterval(interval);
if (map != null) {
fastPut("session:maxInactiveInterval", maxInactiveInterval);
fastPut(MAX_INACTIVE_INTERVAL_ATTR, maxInactiveInterval);
if (maxInactiveInterval >= 0) {
map.expire(getMaxInactiveInterval(), TimeUnit.SECONDS);
}
@ -152,7 +165,7 @@ public class RedissonSession extends StandardSession {
return;
}
fastPut("session:isValid", isValid);
fastPut(IS_VALID_ATTR, isValid);
}
}
@ -161,7 +174,7 @@ public class RedissonSession extends StandardSession {
super.setNew(isNew);
if (map != null) {
fastPut("session:isNew", isNew);
fastPut(IS_NEW_ATTR, isNew);
}
}
@ -171,7 +184,7 @@ public class RedissonSession extends StandardSession {
super.endAccess();
if (isNew != oldValue) {
fastPut("session:isNew", isNew);
fastPut(IS_NEW_ATTR, isNew);
}
}
@ -206,12 +219,12 @@ public class RedissonSession extends StandardSession {
public void save() {
Map<String, Object> newMap = new HashMap<String, Object>();
newMap.put("session:creationTime", creationTime);
newMap.put("session:lastAccessedTime", lastAccessedTime);
newMap.put("session:thisAccessedTime", thisAccessedTime);
newMap.put("session:maxInactiveInterval", maxInactiveInterval);
newMap.put("session:isValid", isValid);
newMap.put("session:isNew", isNew);
newMap.put(CREATION_TIME_ATTR, creationTime);
newMap.put(LAST_ACCESSED_TIME_ATTR, lastAccessedTime);
newMap.put(THIS_ACCESSED_TIME_ATTR, thisAccessedTime);
newMap.put(MAX_INACTIVE_INTERVAL_ATTR, maxInactiveInterval);
newMap.put(IS_VALID_ATTR, isValid);
newMap.put(IS_NEW_ATTR, isNew);
if (attrs != null) {
for (Entry<String, Object> entry : attrs.entrySet()) {
@ -230,27 +243,27 @@ public class RedissonSession extends StandardSession {
}
public void load(Map<String, Object> attrs) {
Long creationTime = (Long) attrs.remove("session:creationTime");
Long creationTime = (Long) attrs.remove(CREATION_TIME_ATTR);
if (creationTime != null) {
this.creationTime = creationTime;
}
Long lastAccessedTime = (Long) attrs.remove("session:lastAccessedTime");
Long lastAccessedTime = (Long) attrs.remove(LAST_ACCESSED_TIME_ATTR);
if (lastAccessedTime != null) {
this.lastAccessedTime = lastAccessedTime;
}
Integer maxInactiveInterval = (Integer) attrs.remove("session:maxInactiveInterval");
Integer maxInactiveInterval = (Integer) attrs.remove(MAX_INACTIVE_INTERVAL_ATTR);
if (maxInactiveInterval != null) {
this.maxInactiveInterval = maxInactiveInterval;
}
Long thisAccessedTime = (Long) attrs.remove("session:thisAccessedTime");
Long thisAccessedTime = (Long) attrs.remove(THIS_ACCESSED_TIME_ATTR);
if (thisAccessedTime != null) {
this.thisAccessedTime = thisAccessedTime;
}
Boolean isValid = (Boolean) attrs.remove("session:isValid");
Boolean isValid = (Boolean) attrs.remove(IS_VALID_ATTR);
if (isValid != null) {
this.isValid = isValid;
}
Boolean isNew = (Boolean) attrs.remove("session:isNew");
Boolean isNew = (Boolean) attrs.remove(IS_NEW_ATTR);
if (isNew != null) {
this.isNew = isNew;
}

@ -17,6 +17,7 @@ package org.redisson.tomcat;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
@ -157,8 +158,14 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle {
@Override
public Session findSession(String id) throws IOException {
Session result = super.findSession(id);
if (result == null && id != null) {
Map<String, Object> attrs = getMap(id).readAllMap();
if (result == null) {
if (id != null) {
Map<String, Object> attrs;
if (readMode == ReadMode.MEMORY) {
attrs = getMap(id).readAllMap();
} else {
attrs = getMap(id).getAll(RedissonSession.ATTRS);
}
if (attrs.isEmpty() || !Boolean.valueOf(String.valueOf(attrs.get("session:isValid")))) {
log.info("Session " + id + " can't be found");
@ -174,6 +181,8 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle {
session.endAccess();
return session;
}
return null;
}
result.access();
result.endAccess();

@ -16,9 +16,12 @@
package org.redisson.tomcat;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.catalina.session.StandardSession;
@ -35,6 +38,16 @@ import org.redisson.tomcat.RedissonSessionManager.UpdateMode;
*/
public class RedissonSession extends StandardSession {
private static final String IS_NEW_ATTR = "session:isNew";
private static final String IS_VALID_ATTR = "session:isValid";
private static final String THIS_ACCESSED_TIME_ATTR = "session:thisAccessedTime";
private static final String MAX_INACTIVE_INTERVAL_ATTR = "session:maxInactiveInterval";
private static final String LAST_ACCESSED_TIME_ATTR = "session:lastAccessedTime";
private static final String CREATION_TIME_ATTR = "session:creationTime";
public static final Set<String> ATTRS = new HashSet<String>(Arrays.asList(IS_NEW_ATTR, IS_VALID_ATTR,
THIS_ACCESSED_TIME_ATTR, MAX_INACTIVE_INTERVAL_ATTR, LAST_ACCESSED_TIME_ATTR, CREATION_TIME_ATTR));
private final RedissonSessionManager redissonManager;
private final Map<String, Object> attrs;
private RMap<String, Object> map;
@ -88,9 +101,9 @@ public class RedissonSession extends StandardSession {
if (map != null) {
Map<String, Object> newMap = new HashMap<String, Object>(3);
newMap.put("session:creationTime", creationTime);
newMap.put("session:lastAccessedTime", lastAccessedTime);
newMap.put("session:thisAccessedTime", thisAccessedTime);
newMap.put(CREATION_TIME_ATTR, creationTime);
newMap.put(LAST_ACCESSED_TIME_ATTR, lastAccessedTime);
newMap.put(THIS_ACCESSED_TIME_ATTR, thisAccessedTime);
map.putAll(newMap);
if (readMode == ReadMode.MEMORY) {
topic.publish(createPutAllMessage(newMap));
@ -104,8 +117,8 @@ public class RedissonSession extends StandardSession {
if (map != null) {
Map<String, Object> newMap = new HashMap<String, Object>(2);
newMap.put("session:lastAccessedTime", lastAccessedTime);
newMap.put("session:thisAccessedTime", thisAccessedTime);
newMap.put(LAST_ACCESSED_TIME_ATTR, lastAccessedTime);
newMap.put(THIS_ACCESSED_TIME_ATTR, thisAccessedTime);
map.putAll(newMap);
if (readMode == ReadMode.MEMORY) {
topic.publish(createPutAllMessage(newMap));
@ -129,7 +142,7 @@ public class RedissonSession extends StandardSession {
super.setMaxInactiveInterval(interval);
if (map != null) {
fastPut("session:maxInactiveInterval", maxInactiveInterval);
fastPut(MAX_INACTIVE_INTERVAL_ATTR, maxInactiveInterval);
if (maxInactiveInterval >= 0) {
map.expire(getMaxInactiveInterval(), TimeUnit.SECONDS);
}
@ -152,7 +165,7 @@ public class RedissonSession extends StandardSession {
return;
}
fastPut("session:isValid", isValid);
fastPut(IS_VALID_ATTR, isValid);
}
}
@ -161,7 +174,7 @@ public class RedissonSession extends StandardSession {
super.setNew(isNew);
if (map != null) {
fastPut("session:isNew", isNew);
fastPut(IS_NEW_ATTR, isNew);
}
}
@ -171,7 +184,7 @@ public class RedissonSession extends StandardSession {
super.endAccess();
if (isNew != oldValue) {
fastPut("session:isNew", isNew);
fastPut(IS_NEW_ATTR, isNew);
}
}
@ -206,12 +219,12 @@ public class RedissonSession extends StandardSession {
public void save() {
Map<String, Object> newMap = new HashMap<String, Object>();
newMap.put("session:creationTime", creationTime);
newMap.put("session:lastAccessedTime", lastAccessedTime);
newMap.put("session:thisAccessedTime", thisAccessedTime);
newMap.put("session:maxInactiveInterval", maxInactiveInterval);
newMap.put("session:isValid", isValid);
newMap.put("session:isNew", isNew);
newMap.put(CREATION_TIME_ATTR, creationTime);
newMap.put(LAST_ACCESSED_TIME_ATTR, lastAccessedTime);
newMap.put(THIS_ACCESSED_TIME_ATTR, thisAccessedTime);
newMap.put(MAX_INACTIVE_INTERVAL_ATTR, maxInactiveInterval);
newMap.put(IS_VALID_ATTR, isValid);
newMap.put(IS_NEW_ATTR, isNew);
if (attrs != null) {
for (Entry<String, Object> entry : attrs.entrySet()) {
@ -230,27 +243,27 @@ public class RedissonSession extends StandardSession {
}
public void load(Map<String, Object> attrs) {
Long creationTime = (Long) attrs.remove("session:creationTime");
Long creationTime = (Long) attrs.remove(CREATION_TIME_ATTR);
if (creationTime != null) {
this.creationTime = creationTime;
}
Long lastAccessedTime = (Long) attrs.remove("session:lastAccessedTime");
Long lastAccessedTime = (Long) attrs.remove(LAST_ACCESSED_TIME_ATTR);
if (lastAccessedTime != null) {
this.lastAccessedTime = lastAccessedTime;
}
Integer maxInactiveInterval = (Integer) attrs.remove("session:maxInactiveInterval");
Integer maxInactiveInterval = (Integer) attrs.remove(MAX_INACTIVE_INTERVAL_ATTR);
if (maxInactiveInterval != null) {
this.maxInactiveInterval = maxInactiveInterval;
}
Long thisAccessedTime = (Long) attrs.remove("session:thisAccessedTime");
Long thisAccessedTime = (Long) attrs.remove(THIS_ACCESSED_TIME_ATTR);
if (thisAccessedTime != null) {
this.thisAccessedTime = thisAccessedTime;
}
Boolean isValid = (Boolean) attrs.remove("session:isValid");
Boolean isValid = (Boolean) attrs.remove(IS_VALID_ATTR);
if (isValid != null) {
this.isValid = isValid;
}
Boolean isNew = (Boolean) attrs.remove("session:isNew");
Boolean isNew = (Boolean) attrs.remove(IS_NEW_ATTR);
if (isNew != null) {
this.isNew = isNew;
}

@ -17,6 +17,7 @@ package org.redisson.tomcat;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
@ -136,8 +137,14 @@ public class RedissonSessionManager extends ManagerBase {
@Override
public Session findSession(String id) throws IOException {
Session result = super.findSession(id);
if (result == null && id != null) {
Map<String, Object> attrs = getMap(id).readAllMap();
if (result == null) {
if (id != null) {
Map<String, Object> attrs = new HashMap<String, Object>();
if (readMode == ReadMode.MEMORY) {
attrs = getMap(id).readAllMap();
} else {
attrs = getMap(id).getAll(RedissonSession.ATTRS);
}
if (attrs.isEmpty() || !Boolean.valueOf(String.valueOf(attrs.get("session:isValid")))) {
log.info("Session " + id + " can't be found");
@ -153,6 +160,8 @@ public class RedissonSessionManager extends ManagerBase {
session.endAccess();
return session;
}
return null;
}
result.access();
result.endAccess();

@ -16,9 +16,12 @@
package org.redisson.tomcat;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.catalina.session.StandardSession;
@ -35,6 +38,16 @@ import org.redisson.tomcat.RedissonSessionManager.UpdateMode;
*/
public class RedissonSession extends StandardSession {
private static final String IS_NEW_ATTR = "session:isNew";
private static final String IS_VALID_ATTR = "session:isValid";
private static final String THIS_ACCESSED_TIME_ATTR = "session:thisAccessedTime";
private static final String MAX_INACTIVE_INTERVAL_ATTR = "session:maxInactiveInterval";
private static final String LAST_ACCESSED_TIME_ATTR = "session:lastAccessedTime";
private static final String CREATION_TIME_ATTR = "session:creationTime";
public static final Set<String> ATTRS = new HashSet<String>(Arrays.asList(IS_NEW_ATTR, IS_VALID_ATTR,
THIS_ACCESSED_TIME_ATTR, MAX_INACTIVE_INTERVAL_ATTR, LAST_ACCESSED_TIME_ATTR, CREATION_TIME_ATTR));
private final RedissonSessionManager redissonManager;
private final Map<String, Object> attrs;
private RMap<String, Object> map;
@ -88,9 +101,9 @@ public class RedissonSession extends StandardSession {
if (map != null) {
Map<String, Object> newMap = new HashMap<String, Object>(3);
newMap.put("session:creationTime", creationTime);
newMap.put("session:lastAccessedTime", lastAccessedTime);
newMap.put("session:thisAccessedTime", thisAccessedTime);
newMap.put(CREATION_TIME_ATTR, creationTime);
newMap.put(LAST_ACCESSED_TIME_ATTR, lastAccessedTime);
newMap.put(THIS_ACCESSED_TIME_ATTR, thisAccessedTime);
map.putAll(newMap);
if (readMode == ReadMode.MEMORY) {
topic.publish(createPutAllMessage(newMap));
@ -104,8 +117,8 @@ public class RedissonSession extends StandardSession {
if (map != null) {
Map<String, Object> newMap = new HashMap<String, Object>(2);
newMap.put("session:lastAccessedTime", lastAccessedTime);
newMap.put("session:thisAccessedTime", thisAccessedTime);
newMap.put(LAST_ACCESSED_TIME_ATTR, lastAccessedTime);
newMap.put(THIS_ACCESSED_TIME_ATTR, thisAccessedTime);
map.putAll(newMap);
if (readMode == ReadMode.MEMORY) {
topic.publish(createPutAllMessage(newMap));
@ -129,7 +142,7 @@ public class RedissonSession extends StandardSession {
super.setMaxInactiveInterval(interval);
if (map != null) {
fastPut("session:maxInactiveInterval", maxInactiveInterval);
fastPut(MAX_INACTIVE_INTERVAL_ATTR, maxInactiveInterval);
if (maxInactiveInterval >= 0) {
map.expire(getMaxInactiveInterval(), TimeUnit.SECONDS);
}
@ -152,7 +165,7 @@ public class RedissonSession extends StandardSession {
return;
}
fastPut("session:isValid", isValid);
fastPut(IS_VALID_ATTR, isValid);
}
}
@ -161,7 +174,7 @@ public class RedissonSession extends StandardSession {
super.setNew(isNew);
if (map != null) {
fastPut("session:isNew", isNew);
fastPut(IS_NEW_ATTR, isNew);
}
}
@ -171,7 +184,7 @@ public class RedissonSession extends StandardSession {
super.endAccess();
if (isNew != oldValue) {
fastPut("session:isNew", isNew);
fastPut(IS_NEW_ATTR, isNew);
}
}
@ -206,12 +219,12 @@ public class RedissonSession extends StandardSession {
public void save() {
Map<String, Object> newMap = new HashMap<String, Object>();
newMap.put("session:creationTime", creationTime);
newMap.put("session:lastAccessedTime", lastAccessedTime);
newMap.put("session:thisAccessedTime", thisAccessedTime);
newMap.put("session:maxInactiveInterval", maxInactiveInterval);
newMap.put("session:isValid", isValid);
newMap.put("session:isNew", isNew);
newMap.put(CREATION_TIME_ATTR, creationTime);
newMap.put(LAST_ACCESSED_TIME_ATTR, lastAccessedTime);
newMap.put(THIS_ACCESSED_TIME_ATTR, thisAccessedTime);
newMap.put(MAX_INACTIVE_INTERVAL_ATTR, maxInactiveInterval);
newMap.put(IS_VALID_ATTR, isValid);
newMap.put(IS_NEW_ATTR, isNew);
if (attrs != null) {
for (Entry<String, Object> entry : attrs.entrySet()) {
@ -230,27 +243,27 @@ public class RedissonSession extends StandardSession {
}
public void load(Map<String, Object> attrs) {
Long creationTime = (Long) attrs.remove("session:creationTime");
Long creationTime = (Long) attrs.remove(CREATION_TIME_ATTR);
if (creationTime != null) {
this.creationTime = creationTime;
}
Long lastAccessedTime = (Long) attrs.remove("session:lastAccessedTime");
Long lastAccessedTime = (Long) attrs.remove(LAST_ACCESSED_TIME_ATTR);
if (lastAccessedTime != null) {
this.lastAccessedTime = lastAccessedTime;
}
Integer maxInactiveInterval = (Integer) attrs.remove("session:maxInactiveInterval");
Integer maxInactiveInterval = (Integer) attrs.remove(MAX_INACTIVE_INTERVAL_ATTR);
if (maxInactiveInterval != null) {
this.maxInactiveInterval = maxInactiveInterval;
}
Long thisAccessedTime = (Long) attrs.remove("session:thisAccessedTime");
Long thisAccessedTime = (Long) attrs.remove(THIS_ACCESSED_TIME_ATTR);
if (thisAccessedTime != null) {
this.thisAccessedTime = thisAccessedTime;
}
Boolean isValid = (Boolean) attrs.remove("session:isValid");
Boolean isValid = (Boolean) attrs.remove(IS_VALID_ATTR);
if (isValid != null) {
this.isValid = isValid;
}
Boolean isNew = (Boolean) attrs.remove("session:isNew");
Boolean isNew = (Boolean) attrs.remove(IS_NEW_ATTR);
if (isNew != null) {
this.isNew = isNew;
}

@ -17,6 +17,7 @@ package org.redisson.tomcat;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
@ -36,9 +37,6 @@ import org.redisson.api.listener.MessageListener;
import org.redisson.client.codec.Codec;
import org.redisson.config.Config;
import io.netty.buffer.ByteBufUtil;
import io.netty.util.internal.PlatformDependent;
/**
* Redisson Session Manager for Apache Tomcat
*
@ -60,15 +58,6 @@ public class RedissonSessionManager extends ManagerBase {
private String keyPrefix = "";
private final String id = ByteBufUtil.hexDump(generateId());
protected static byte[] generateId() {
byte[] id = new byte[16];
// TODO JDK UPGRADE replace to native ThreadLocalRandom
PlatformDependent.threadLocalRandom().nextBytes(id);
return id;
}
public String getUpdateMode() {
return updateMode.toString();
}
@ -147,8 +136,14 @@ public class RedissonSessionManager extends ManagerBase {
@Override
public Session findSession(String id) throws IOException {
Session result = super.findSession(id);
if (result == null && id != null) {
Map<String, Object> attrs = getMap(id).readAllMap();
if (result == null) {
if (id != null) {
Map<String, Object> attrs = new HashMap<String, Object>();
if (readMode == ReadMode.MEMORY) {
attrs = getMap(id).readAllMap();
} else {
attrs = getMap(id).getAll(RedissonSession.ATTRS);
}
if (attrs.isEmpty() || !Boolean.valueOf(String.valueOf(attrs.get("session:isValid")))) {
log.info("Session " + id + " can't be found");
@ -164,6 +159,8 @@ public class RedissonSessionManager extends ManagerBase {
session.endAccess();
return session;
}
return null;
}
result.access();
result.endAccess();

@ -16,9 +16,12 @@
package org.redisson.tomcat;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.catalina.session.StandardSession;
@ -35,6 +38,16 @@ import org.redisson.tomcat.RedissonSessionManager.UpdateMode;
*/
public class RedissonSession extends StandardSession {
private static final String IS_NEW_ATTR = "session:isNew";
private static final String IS_VALID_ATTR = "session:isValid";
private static final String THIS_ACCESSED_TIME_ATTR = "session:thisAccessedTime";
private static final String MAX_INACTIVE_INTERVAL_ATTR = "session:maxInactiveInterval";
private static final String LAST_ACCESSED_TIME_ATTR = "session:lastAccessedTime";
private static final String CREATION_TIME_ATTR = "session:creationTime";
public static final Set<String> ATTRS = new HashSet<String>(Arrays.asList(IS_NEW_ATTR, IS_VALID_ATTR,
THIS_ACCESSED_TIME_ATTR, MAX_INACTIVE_INTERVAL_ATTR, LAST_ACCESSED_TIME_ATTR, CREATION_TIME_ATTR));
private final RedissonSessionManager redissonManager;
private final Map<String, Object> attrs;
private RMap<String, Object> map;
@ -88,9 +101,9 @@ public class RedissonSession extends StandardSession {
if (map != null) {
Map<String, Object> newMap = new HashMap<String, Object>(3);
newMap.put("session:creationTime", creationTime);
newMap.put("session:lastAccessedTime", lastAccessedTime);
newMap.put("session:thisAccessedTime", thisAccessedTime);
newMap.put(CREATION_TIME_ATTR, creationTime);
newMap.put(LAST_ACCESSED_TIME_ATTR, lastAccessedTime);
newMap.put(THIS_ACCESSED_TIME_ATTR, thisAccessedTime);
map.putAll(newMap);
if (readMode == ReadMode.MEMORY) {
topic.publish(createPutAllMessage(newMap));
@ -104,8 +117,8 @@ public class RedissonSession extends StandardSession {
if (map != null) {
Map<String, Object> newMap = new HashMap<String, Object>(2);
newMap.put("session:lastAccessedTime", lastAccessedTime);
newMap.put("session:thisAccessedTime", thisAccessedTime);
newMap.put(LAST_ACCESSED_TIME_ATTR, lastAccessedTime);
newMap.put(THIS_ACCESSED_TIME_ATTR, thisAccessedTime);
map.putAll(newMap);
if (readMode == ReadMode.MEMORY) {
topic.publish(createPutAllMessage(newMap));
@ -129,7 +142,7 @@ public class RedissonSession extends StandardSession {
super.setMaxInactiveInterval(interval);
if (map != null) {
fastPut("session:maxInactiveInterval", maxInactiveInterval);
fastPut(MAX_INACTIVE_INTERVAL_ATTR, maxInactiveInterval);
if (maxInactiveInterval >= 0) {
map.expire(getMaxInactiveInterval(), TimeUnit.SECONDS);
}
@ -152,7 +165,7 @@ public class RedissonSession extends StandardSession {
return;
}
fastPut("session:isValid", isValid);
fastPut(IS_VALID_ATTR, isValid);
}
}
@ -161,7 +174,7 @@ public class RedissonSession extends StandardSession {
super.setNew(isNew);
if (map != null) {
fastPut("session:isNew", isNew);
fastPut(IS_NEW_ATTR, isNew);
}
}
@ -171,7 +184,7 @@ public class RedissonSession extends StandardSession {
super.endAccess();
if (isNew != oldValue) {
fastPut("session:isNew", isNew);
fastPut(IS_NEW_ATTR, isNew);
}
}
@ -206,12 +219,12 @@ public class RedissonSession extends StandardSession {
public void save() {
Map<String, Object> newMap = new HashMap<String, Object>();
newMap.put("session:creationTime", creationTime);
newMap.put("session:lastAccessedTime", lastAccessedTime);
newMap.put("session:thisAccessedTime", thisAccessedTime);
newMap.put("session:maxInactiveInterval", maxInactiveInterval);
newMap.put("session:isValid", isValid);
newMap.put("session:isNew", isNew);
newMap.put(CREATION_TIME_ATTR, creationTime);
newMap.put(LAST_ACCESSED_TIME_ATTR, lastAccessedTime);
newMap.put(THIS_ACCESSED_TIME_ATTR, thisAccessedTime);
newMap.put(MAX_INACTIVE_INTERVAL_ATTR, maxInactiveInterval);
newMap.put(IS_VALID_ATTR, isValid);
newMap.put(IS_NEW_ATTR, isNew);
if (attrs != null) {
for (Entry<String, Object> entry : attrs.entrySet()) {
@ -230,27 +243,27 @@ public class RedissonSession extends StandardSession {
}
public void load(Map<String, Object> attrs) {
Long creationTime = (Long) attrs.remove("session:creationTime");
Long creationTime = (Long) attrs.remove(CREATION_TIME_ATTR);
if (creationTime != null) {
this.creationTime = creationTime;
}
Long lastAccessedTime = (Long) attrs.remove("session:lastAccessedTime");
Long lastAccessedTime = (Long) attrs.remove(LAST_ACCESSED_TIME_ATTR);
if (lastAccessedTime != null) {
this.lastAccessedTime = lastAccessedTime;
}
Integer maxInactiveInterval = (Integer) attrs.remove("session:maxInactiveInterval");
Integer maxInactiveInterval = (Integer) attrs.remove(MAX_INACTIVE_INTERVAL_ATTR);
if (maxInactiveInterval != null) {
this.maxInactiveInterval = maxInactiveInterval;
}
Long thisAccessedTime = (Long) attrs.remove("session:thisAccessedTime");
Long thisAccessedTime = (Long) attrs.remove(THIS_ACCESSED_TIME_ATTR);
if (thisAccessedTime != null) {
this.thisAccessedTime = thisAccessedTime;
}
Boolean isValid = (Boolean) attrs.remove("session:isValid");
Boolean isValid = (Boolean) attrs.remove(IS_VALID_ATTR);
if (isValid != null) {
this.isValid = isValid;
}
Boolean isNew = (Boolean) attrs.remove("session:isNew");
Boolean isNew = (Boolean) attrs.remove(IS_NEW_ATTR);
if (isNew != null) {
this.isNew = isNew;
}

@ -17,6 +17,7 @@ package org.redisson.tomcat;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
@ -36,9 +37,6 @@ import org.redisson.api.listener.MessageListener;
import org.redisson.client.codec.Codec;
import org.redisson.config.Config;
import io.netty.buffer.ByteBufUtil;
import io.netty.util.internal.PlatformDependent;
/**
* Redisson Session Manager for Apache Tomcat
*
@ -60,15 +58,6 @@ public class RedissonSessionManager extends ManagerBase {
private String keyPrefix = "";
private final String id = ByteBufUtil.hexDump(generateId());
protected static byte[] generateId() {
byte[] id = new byte[16];
// TODO JDK UPGRADE replace to native ThreadLocalRandom
PlatformDependent.threadLocalRandom().nextBytes(id);
return id;
}
public String getUpdateMode() {
return updateMode.toString();
}
@ -147,8 +136,14 @@ public class RedissonSessionManager extends ManagerBase {
@Override
public Session findSession(String id) throws IOException {
Session result = super.findSession(id);
if (result == null && id != null) {
Map<String, Object> attrs = getMap(id).readAllMap();
if (result == null) {
if (id != null) {
Map<String, Object> attrs = new HashMap<String, Object>();
if (readMode == ReadMode.MEMORY) {
attrs = getMap(id).readAllMap();
} else {
attrs = getMap(id).getAll(RedissonSession.ATTRS);
}
if (attrs.isEmpty() || !Boolean.valueOf(String.valueOf(attrs.get("session:isValid")))) {
log.info("Session " + id + " can't be found");
@ -164,6 +159,8 @@ public class RedissonSessionManager extends ManagerBase {
session.endAccess();
return session;
}
return null;
}
result.access();
result.endAccess();

Loading…
Cancel
Save