Author: fhanik
Date: Tue Mar 27 17:55:41 2012
New Revision: 1305931
URL: http://svn.apache.org/viewvc?rev=1305931&view=rev
Log:
https://issues.apache.org/bugzilla/show_bug.cgi?id=52066
Add in a configuration attribute to allow a thread interrupt state to be
retained for the calling library to see
Modified:
tomcat/trunk/modules/jdbc-pool/doc/jdbc-pool.xml
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/DataSourceProxy.java
tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PoolConfiguration.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/doc/jdbc-pool.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/doc/jdbc-pool.xml?rev=1305931&r1=1305930&r2=1305931&view=diff
==============================================================================
--- tomcat/trunk/modules/jdbc-pool/doc/jdbc-pool.xml (original)
+++ tomcat/trunk/modules/jdbc-pool/doc/jdbc-pool.xml Tue Mar 27 17:55:41 2012
@@ -463,6 +463,11 @@
<p>(boolean) Set this to true to log errors during the validation phase
to the log file. If set to true, errors will be logged as SEVERE. Default value
is <code>false</code> for backwards compatibility.
</p>
</attribute>
+ <attribute name="propagateInterruptState" required="false">
+ <p>(boolean) Set this to true to propagate the interrupt state for a
thread that has been interrupted (not clearing the interrupt state). Default
value is <code>false</code> for backwards compatibility.
+ </p>
+ </attribute>
+
</attributes>
</subsection>
</section>
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=1305931&r1=1305930&r2=1305931&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 Mar 27 17:55:41 2012
@@ -381,7 +381,9 @@ public class ConnectionPool {
}
} //while
} catch (InterruptedException ex) {
- Thread.interrupted();
+ if (!getPoolProperties().getPropagateInterruptState()) {
+ Thread.interrupted();
+ }
}
if (pool.size()==0 && force && pool!=busy) pool = busy;
}
@@ -626,7 +628,9 @@ public class ConnectionPool {
//retrieve an existing connection
con = idle.poll(timetowait, TimeUnit.MILLISECONDS);
} catch (InterruptedException ex) {
- Thread.interrupted();//clear the flag, and bail out
+ if (!getPoolProperties().getPropagateInterruptState()) {
+ Thread.interrupted();
+ }
SQLException sx = new SQLException("Pool wait interrupted.");
sx.initCause(ex);
throw sx;
Modified:
tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/DataSourceProxy.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/DataSourceProxy.java?rev=1305931&r1=1305930&r2=1305931&view=diff
==============================================================================
---
tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/DataSourceProxy.java
(original)
+++
tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/DataSourceProxy.java
Tue Mar 27 17:55:41 2012
@@ -1268,4 +1268,20 @@ public class DataSourceProxy implements
return getPoolProperties().getLogValidationErrors();
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean getPropagateInterruptState() {
+ return getPoolProperties().getPropagateInterruptState();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setPropagateInterruptState(boolean propagateInterruptState) {
+
getPoolProperties().setPropagateInterruptState(propagateInterruptState);
+ }
+
}
Modified:
tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PoolConfiguration.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PoolConfiguration.java?rev=1305931&r1=1305930&r2=1305931&view=diff
==============================================================================
---
tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PoolConfiguration.java
(original)
+++
tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PoolConfiguration.java
Tue Mar 27 17:55:41 2012
@@ -847,4 +847,21 @@ public interface PoolConfiguration {
*/
public boolean getLogValidationErrors();
+ /**
+ * Returns true if the pool is configured to propagate interrupt state of
a thread.
+ * A thread waiting for a connection, can have its wait interrupted, and
by default
+ * will clear the interrupt flag and throw a {@link PoolExhaustedException}
+ * @return true if the pool is configured to propagate and not clear the
thread interrupt state
+ */
+ public boolean getPropagateInterruptState();
+
+ /**
+ * Configure the pool to propagate interrupt state for interrupted threads
waiting for a connection
+ * A thread waiting for a connection, can have its wait interrupted, and
by default
+ * will clear the interrupt flag and throw a {@link PoolExhaustedException}
+ * If set to true, this behavior will change, while the {@link
PoolExhaustedException} is still thrown, the threads interrupted state is still
set.
+ * @param propagateInterruptState - set to true to not clear, but
propagate, a threads interrupted state.
+ */
+ public void setPropagateInterruptState(boolean propagateInterruptState);
+
}
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=1305931&r1=1305930&r2=1305931&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 Mar 27 17:55:41 2012
@@ -88,6 +88,7 @@ public class PoolProperties implements P
protected boolean rollbackOnReturn = false;
protected boolean useDisposableConnectionFacade = true;
protected boolean logValidationErrors = false;
+ protected boolean propagateInterruptState = false;
/**
@@ -1229,6 +1230,22 @@ public class PoolProperties implements P
return this.logValidationErrors;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean getPropagateInterruptState() {
+ return propagateInterruptState;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setPropagateInterruptState(boolean propagateInterruptState) {
+ this.propagateInterruptState = propagateInterruptState;
+ }
+
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
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=1305931&r1=1305930&r2=1305931&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 Mar 27 17:55:41 2012
@@ -30,6 +30,7 @@ import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.jdbc.pool.PoolConfiguration;
import org.apache.tomcat.jdbc.pool.PoolProperties.InterceptorDefinition;
+import org.apache.tomcat.jdbc.pool.PoolExhaustedException;
import org.apache.tomcat.jdbc.pool.PoolUtilities;
import org.apache.tomcat.jdbc.pool.Validator;
@@ -811,6 +812,21 @@ public class ConnectionPool extends Noti
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean getPropagateInterruptState() {
+ return getPoolProperties().getPropagateInterruptState();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setPropagateInterruptState(boolean propagateInterruptState) {
+
getPoolProperties().setPropagateInterruptState(propagateInterruptState);
+ }
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]