Author: fhanik Date: Tue Apr 10 16:29:42 2012 New Revision: 1311844 URL: http://svn.apache.org/viewvc?rev=1311844&view=rev Log: https://issues.apache.org/bugzilla/show_bug.cgi?id=50864 Add in the ability to configure most pool properties even while the pool is running
Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PoolProperties.java tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPool.java Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java?rev=1311844&r1=1311843&r2=1311844&view=diff ============================================================================== --- tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java (original) +++ tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java Tue Apr 10 16:29:42 2012 @@ -442,11 +442,7 @@ public class ConnectionPool { idle = new ArrayBlockingQueue<PooledConnection>(properties.getMaxActive(),properties.isFairQueue()); } - //if the evictor thread is supposed to run, start it now - if (properties.isPoolSweeperEnabled()) { - poolCleaner = new PoolCleaner(this, properties.getTimeBetweenEvictionRunsMillis()); - poolCleaner.start(); - } //end if + initializePoolCleaner(properties); //create JMX MBean if (this.getPoolProperties().isJmxEnabled()) createMBean(); @@ -496,6 +492,15 @@ public class ConnectionPool { } + public void initializePoolCleaner(PoolConfiguration properties) { + //if the evictor thread is supposed to run, start it now + if (properties.isPoolSweeperEnabled()) { + poolCleaner = new PoolCleaner(this, properties.getTimeBetweenEvictionRunsMillis()); + poolCleaner.start(); + } //end if + } + + //=============================================================================== // CONNECTION POOLING IMPL LOGIC //=============================================================================== Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PoolProperties.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PoolProperties.java?rev=1311844&r1=1311843&r2=1311844&view=diff ============================================================================== --- tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PoolProperties.java (original) +++ tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PoolProperties.java Tue Apr 10 16:29:42 2012 @@ -42,55 +42,55 @@ public class PoolProperties implements P public static final int DEFAULT_MAX_ACTIVE = 100; protected static AtomicInteger poolCounter = new AtomicInteger(0); - protected Properties dbProperties = new Properties(); - protected String url = null; - protected String driverClassName = null; - protected Boolean defaultAutoCommit = null; - protected Boolean defaultReadOnly = null; - protected int defaultTransactionIsolation = DataSourceFactory.UNKNOWN_TRANSACTIONISOLATION; - protected String defaultCatalog = null; - protected String connectionProperties; - protected int initialSize = 10; - protected int maxActive = DEFAULT_MAX_ACTIVE; - protected int maxIdle = maxActive; - protected int minIdle = initialSize; - protected int maxWait = 30000; - protected String validationQuery; - protected String validatorClassName; - protected Validator validator; - protected boolean testOnBorrow = false; - protected boolean testOnReturn = false; - protected boolean testWhileIdle = false; - protected int timeBetweenEvictionRunsMillis = 5000; - protected int numTestsPerEvictionRun; - protected int minEvictableIdleTimeMillis = 60000; - protected final boolean accessToUnderlyingConnectionAllowed = true; - protected boolean removeAbandoned = false; - protected int removeAbandonedTimeout = 60; - protected boolean logAbandoned = false; - protected String name = "Tomcat Connection Pool["+(poolCounter.addAndGet(1))+"-"+System.identityHashCode(PoolProperties.class)+"]"; - protected String password; - protected String username; - protected long validationInterval = 30000; - protected boolean jmxEnabled = true; - protected String initSQL; - protected boolean testOnConnect =false; - protected String jdbcInterceptors=null; - protected boolean fairQueue = true; - protected boolean useEquals = true; - protected int abandonWhenPercentageFull = 0; - protected long maxAge = 0; - protected boolean useLock = false; - protected InterceptorDefinition[] interceptors = null; - protected int suspectTimeout = 0; - protected Object dataSource = null; - protected String dataSourceJNDI = null; - protected boolean alternateUsernameAllowed = false; - protected boolean commitOnReturn = false; - protected boolean rollbackOnReturn = false; - protected boolean useDisposableConnectionFacade = true; - protected boolean logValidationErrors = false; - protected boolean propagateInterruptState = false; + private volatile Properties dbProperties = new Properties(); + private volatile String url = null; + private volatile String driverClassName = null; + private volatile Boolean defaultAutoCommit = null; + private volatile Boolean defaultReadOnly = null; + private volatile int defaultTransactionIsolation = DataSourceFactory.UNKNOWN_TRANSACTIONISOLATION; + private volatile String defaultCatalog = null; + private volatile String connectionProperties; + private volatile int initialSize = 10; + private volatile int maxActive = DEFAULT_MAX_ACTIVE; + private volatile int maxIdle = maxActive; + private volatile int minIdle = initialSize; + private volatile int maxWait = 30000; + private volatile String validationQuery; + private volatile String validatorClassName; + private volatile Validator validator; + private volatile boolean testOnBorrow = false; + private volatile boolean testOnReturn = false; + private volatile boolean testWhileIdle = false; + private volatile int timeBetweenEvictionRunsMillis = 5000; + private volatile int numTestsPerEvictionRun; + private volatile int minEvictableIdleTimeMillis = 60000; + private volatile boolean accessToUnderlyingConnectionAllowed = true; + private volatile boolean removeAbandoned = false; + private volatile int removeAbandonedTimeout = 60; + private volatile boolean logAbandoned = false; + private volatile String name = "Tomcat Connection Pool["+(poolCounter.addAndGet(1))+"-"+System.identityHashCode(PoolProperties.class)+"]"; + private volatile String password; + private volatile String username; + private volatile long validationInterval = 30000; + private volatile boolean jmxEnabled = true; + private volatile String initSQL; + private volatile boolean testOnConnect =false; + private volatile String jdbcInterceptors=null; + private volatile boolean fairQueue = true; + private volatile boolean useEquals = true; + private volatile int abandonWhenPercentageFull = 0; + private volatile long maxAge = 0; + private volatile boolean useLock = false; + private volatile InterceptorDefinition[] interceptors = null; + private volatile int suspectTimeout = 0; + private volatile Object dataSource = null; + private volatile String dataSourceJNDI = null; + private volatile boolean alternateUsernameAllowed = false; + private volatile boolean commitOnReturn = false; + private volatile boolean rollbackOnReturn = false; + private volatile boolean useDisposableConnectionFacade = true; + private volatile boolean logValidationErrors = false; + private volatile boolean propagateInterruptState = false; /** Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPool.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPool.java?rev=1311844&r1=1311843&r2=1311844&view=diff ============================================================================== --- tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPool.java (original) +++ tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/jmx/ConnectionPool.java Tue Apr 10 16:29:42 2012 @@ -490,176 +490,177 @@ public class ConnectionPool extends Noti @Override public void setInitialSize(int initialSize) { - // TODO Auto-generated method stub + // noop - this pool is already running + throw new UnsupportedOperationException(); } @Override public void setInitSQL(String initSQL) { - // TODO Auto-generated method stub + getPoolProperties().setInitSQL(initSQL); } @Override public void setJdbcInterceptors(String jdbcInterceptors) { - // TODO Auto-generated method stub - + // noop - this pool is already running + throw new UnsupportedOperationException(); } @Override public void setJmxEnabled(boolean jmxEnabled) { - // TODO Auto-generated method stub - + // noop - this pool is already running and obviously jmx enabled + throw new UnsupportedOperationException(); } @Override public void setLogAbandoned(boolean logAbandoned) { - // TODO Auto-generated method stub - + getPoolProperties().setLogAbandoned(logAbandoned); } @Override public void setMaxActive(int maxActive) { - // TODO Auto-generated method stub - + getPoolProperties().setMaxActive(maxActive); } @Override public void setMaxIdle(int maxIdle) { - // TODO Auto-generated method stub + getPoolProperties().setMaxIdle(maxIdle); } @Override public void setMaxWait(int maxWait) { - // TODO Auto-generated method stub - + getPoolProperties().setMaxWait(maxWait); } @Override public void setMinEvictableIdleTimeMillis(int minEvictableIdleTimeMillis) { - // TODO Auto-generated method stub - + boolean wasEnabled = getPoolProperties().isPoolSweeperEnabled(); + getPoolProperties().setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); + boolean shouldBeEnabled = getPoolProperties().isPoolSweeperEnabled(); + //make sure pool cleaner starts when it should + if (!wasEnabled && shouldBeEnabled) pool.initializePoolCleaner(getPoolProperties()); } @Override public void setMinIdle(int minIdle) { - // TODO Auto-generated method stub - + getPoolProperties().setMinIdle(minIdle); } @Override public void setNumTestsPerEvictionRun(int numTestsPerEvictionRun) { - // TODO Auto-generated method stub - + getPoolProperties().setNumTestsPerEvictionRun(numTestsPerEvictionRun); } @Override public void setPassword(String password) { - // TODO Auto-generated method stub - + getPoolProperties().setPassword(password); } @Override public void setRemoveAbandoned(boolean removeAbandoned) { - // TODO Auto-generated method stub - + boolean wasEnabled = getPoolProperties().isPoolSweeperEnabled(); + getPoolProperties().setRemoveAbandoned(removeAbandoned); + boolean shouldBeEnabled = getPoolProperties().isPoolSweeperEnabled(); + //make sure pool cleaner starts when it should + if (!wasEnabled && shouldBeEnabled) pool.initializePoolCleaner(getPoolProperties()); } @Override public void setRemoveAbandonedTimeout(int removeAbandonedTimeout) { - // TODO Auto-generated method stub - + boolean wasEnabled = getPoolProperties().isPoolSweeperEnabled(); + getPoolProperties().setRemoveAbandonedTimeout(removeAbandonedTimeout); + boolean shouldBeEnabled = getPoolProperties().isPoolSweeperEnabled(); + //make sure pool cleaner starts when it should + if (!wasEnabled && shouldBeEnabled) pool.initializePoolCleaner(getPoolProperties()); } @Override public void setTestOnBorrow(boolean testOnBorrow) { - // TODO Auto-generated method stub - + getPoolProperties().setTestOnBorrow(testOnBorrow); } @Override public void setTestOnConnect(boolean testOnConnect) { - // TODO Auto-generated method stub - + getPoolProperties().setTestOnConnect(testOnConnect); } @Override public void setTestOnReturn(boolean testOnReturn) { - // TODO Auto-generated method stub - + getPoolProperties().setTestOnReturn(testOnReturn); } @Override public void setTestWhileIdle(boolean testWhileIdle) { - // TODO Auto-generated method stub - + boolean wasEnabled = getPoolProperties().isPoolSweeperEnabled(); + getPoolProperties().setTestWhileIdle(testWhileIdle); + boolean shouldBeEnabled = getPoolProperties().isPoolSweeperEnabled(); + //make sure pool cleaner starts when it should + if (!wasEnabled && shouldBeEnabled) pool.initializePoolCleaner(getPoolProperties()); } @Override public void setTimeBetweenEvictionRunsMillis(int timeBetweenEvictionRunsMillis) { - // TODO Auto-generated method stub - + boolean wasEnabled = getPoolProperties().isPoolSweeperEnabled(); + getPoolProperties().setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); + boolean shouldBeEnabled = getPoolProperties().isPoolSweeperEnabled(); + //make sure pool cleaner starts when it should + if (!wasEnabled && shouldBeEnabled) pool.initializePoolCleaner(getPoolProperties()); } @Override public void setUrl(String url) { - // TODO Auto-generated method stub - + getPoolProperties().setUrl(url); } @Override public void setUseEquals(boolean useEquals) { - // TODO Auto-generated method stub - + getPoolProperties().setUseEquals(useEquals); } @Override public void setUseLock(boolean useLock) { - // TODO Auto-generated method stub - + getPoolProperties().setUseLock(useLock); } @Override public void setUsername(String username) { - // TODO Auto-generated method stub - + getPoolProperties().setUsername(username); } @Override public void setValidationInterval(long validationInterval) { - // TODO Auto-generated method stub - + getPoolProperties().setValidationInterval(validationInterval); } @Override public void setValidationQuery(String validationQuery) { - // TODO Auto-generated method stub - + getPoolProperties().setValidationQuery(validationQuery); } /** @@ -686,7 +687,7 @@ public class ConnectionPool extends Noti @Override public void setSuspectTimeout(int seconds) { - //no op + getPoolProperties().setSuspectTimeout(seconds); } /** @@ -711,7 +712,7 @@ public class ConnectionPool extends Noti */ @Override public void setDataSourceJNDI(String jndiDS) { - //noop + getPoolProperties().setDataSourceJNDI(jndiDS); } /** @@ -735,7 +736,7 @@ public class ConnectionPool extends Noti */ @Override public void setAlternateUsernameAllowed(boolean alternateUsernameAllowed) { - //noop + getPoolProperties().setAlternateUsernameAllowed(alternateUsernameAllowed); } /** @@ -743,7 +744,7 @@ public class ConnectionPool extends Noti */ @Override public void setValidator(Validator validator) { - //noop + getPoolProperties().setValidator(validator); } /** --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org