diff --git a/src/main/java/com/radiadesign/catalina/session/RedisSessionManager.java b/src/main/java/com/radiadesign/catalina/session/RedisSessionManager.java index 95faa494..ad8588a0 100644 --- a/src/main/java/com/radiadesign/catalina/session/RedisSessionManager.java +++ b/src/main/java/com/radiadesign/catalina/session/RedisSessionManager.java @@ -27,6 +27,11 @@ public class RedisSessionManager extends ManagerBase implements Lifecycle { + public static final int DEFAULT_MAX_WAIT = -1; + public static final int DEFAULT_MAX_IDLE = 8; + public static final int DEFAULT_MIN_IDLE = 0; + public static final int DEFAULT_MAX_ACTIVE = 8; + protected byte[] NULL_SESSION = "null".getBytes(); private final Log log = LogFactory.getLog(RedisSessionManager.class); @@ -36,6 +41,12 @@ public class RedisSessionManager extends ManagerBase implements Lifecycle { protected int database = 0; protected String password = null; protected int timeout = Protocol.DEFAULT_TIMEOUT; + + protected int maxIdle = DEFAULT_MAX_IDLE; + protected int minIdle = DEFAULT_MIN_IDLE; + protected int maxActive = DEFAULT_MAX_ACTIVE; + protected long maxWait = DEFAULT_MAX_WAIT; + protected JedisPool connectionPool; protected RedisSessionHandlerValve handlerValve; @@ -97,6 +108,38 @@ public void setSerializationStrategyClass(String strategy) { this.serializationStrategyClass = strategy; } + public int getMaxIdle() { + return maxIdle; + } + + public void setMaxIdle(int maxIdle) { + this.maxIdle = maxIdle; + } + + public int getMinIdle() { + return minIdle; + } + + public void setMinIdle(int minIdle) { + this.minIdle = minIdle; + } + + public int getMaxActive() { + return maxActive; + } + + public void setMaxActive(int maxActive) { + this.maxActive = maxActive; + } + + public long getMaxWait() { + return maxWait; + } + + public void setMaxWait(long maxWait) { + this.maxWait = maxWait; + } + @Override public int getRejectedSessions() { // Essentially do nothing. @@ -519,14 +562,23 @@ public void processExpires() { private void initializeDatabaseConnection() throws LifecycleException { try { - // TODO: Allow configuration of pool (such as size...) - connectionPool = new JedisPool(new JedisPoolConfig(), getHost(), getPort(), getTimeout(), getPassword()); + JedisPoolConfig config = createJedisPoolConfig(); + connectionPool = new JedisPool(config, getHost(), getPort(), getTimeout(), getPassword()); } catch (Exception e) { e.printStackTrace(); throw new LifecycleException("Error Connecting to Redis", e); } } + public JedisPoolConfig createJedisPoolConfig() { + JedisPoolConfig config = new JedisPoolConfig(); + config.setMaxWait(maxWait); + config.setMinIdle(minIdle); + config.setMaxIdle(maxIdle); + config.setMaxActive(maxActive); + return config; + } + private void initializeSerializer() throws ClassNotFoundException, IllegalAccessException, InstantiationException { log.info("Attempting to use serializer :" + serializationStrategyClass); serializer = (Serializer) Class.forName(serializationStrategyClass).newInstance();