This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch DBCP-567 in repository https://gitbox.apache.org/repos/asf/commons-dbcp.git
commit 3d84591c1596908c6095c8670fd13e04f8a92012 Author: Romain Manni-Bucau <rmannibu...@gmail.com> AuthorDate: Mon Dec 28 19:20:50 2020 +0100 [DBCP-567] making abort synchronous --- .../commons/dbcp2/PoolableConnectionFactory.java | 31 ++-------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java index a0c053d..9fcbc1c 100644 --- a/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java +++ b/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java @@ -17,16 +17,11 @@ package org.apache.commons.dbcp2; -import java.security.AccessController; -import java.security.PrivilegedAction; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.Collection; import java.util.Objects; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicLong; import javax.management.ObjectName; @@ -49,26 +44,6 @@ import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig; */ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableConnection>, AutoCloseable { - /** - * Thread factory that creates daemon threads, with the context class loader from this class. - */ - private static class AbortThreadFactory implements ThreadFactory { - - private static final AbortThreadFactory INSTANCE = new AbortThreadFactory(); - - @Override - public Thread newThread(final Runnable runnable) { - final Thread thread = new Thread(null, runnable, "commons-dbcp-abort-thread"); - thread.setDaemon(true); // POOL-363 - Required for applications using Runtime.addShutdownHook(). - AccessController.doPrivileged((PrivilegedAction<Void>) () -> { - thread.setContextClassLoader(AbortThreadFactory.class.getClassLoader()); - return null; - }); - - return thread; - } - } - private static final Log log = LogFactory.getLog(PoolableConnectionFactory.class); /** @@ -120,8 +95,6 @@ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableCo private Integer defaultQueryTimeoutSeconds; - private final ExecutorService executor = Executors.newFixedThreadPool(3, AbortThreadFactory.INSTANCE); - /** * Creates a new {@code PoolableConnectionFactory}. * @@ -167,7 +140,7 @@ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableCo */ @Override public void close() { - executor.shutdown(); + // no-op } @Override @@ -181,7 +154,7 @@ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableCo @Override public void destroyObject(final PooledObject<PoolableConnection> p, final DestroyMode mode) throws Exception { if (mode != null && mode.equals(DestroyMode.ABANDONED)) { - p.getObject().getInnermostDelegate().abort(executor); + p.getObject().getInnermostDelegate().abort(Runnable::run); } else { p.getObject().reallyClose(); }