This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-pool.git
The following commit(s) were added to refs/heads/master by this push: new 88903bf Use lambdas. Inline single use local variables. 88903bf is described below commit 88903bf659ac8ff89ffefa9dd861d3f03e004dfb Author: Gary Gregory <gardgreg...@gmail.com> AuthorDate: Mon Jun 28 12:48:28 2021 -0400 Use lambdas. Inline single use local variables. --- .../commons/pool2/impl/BaseGenericObjectPool.java | 18 +++++++++++ .../commons/pool2/impl/GenericKeyedObjectPool.java | 24 ++------------ .../commons/pool2/impl/GenericObjectPool.java | 37 +++------------------- .../pool2/impl/SoftReferenceObjectPool.java | 18 ++++------- 4 files changed, 32 insertions(+), 65 deletions(-) diff --git a/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java b/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java index 0acb7c5..b3c7aea 100644 --- a/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java +++ b/src/main/java/org/apache/commons/pool2/impl/BaseGenericObjectPool.java @@ -23,10 +23,13 @@ import java.lang.management.ManagementFactory; import java.lang.ref.WeakReference; import java.lang.reflect.InvocationTargetException; import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; import java.util.Arrays; import java.util.Deque; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.TimerTask; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.atomic.AtomicLong; @@ -1790,5 +1793,20 @@ public abstract class BaseGenericObjectPool<T> extends BaseObject { activeTimes.add(activeTime); } + protected ArrayList<PooledObject<T>> createRemoveList(final AbandonedConfig abandonedConfig, final Map<IdentityWrapper<T>, PooledObject<T>> allObjects) { + final Instant timeout = Instant.now().minus(abandonedConfig.getRemoveAbandonedTimeoutDuration()); + final ArrayList<PooledObject<T>> remove = new ArrayList<>(); + allObjects.values().forEach(pooledObject -> { + synchronized (pooledObject) { + if (pooledObject.getState() == PooledObjectState.ALLOCATED && + pooledObject.getLastUsedInstant().compareTo(timeout) <= 0) { + pooledObject.markAbandoned(); + remove.add(pooledObject); + } + } + }); + return remove; + } + } diff --git a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java index a6b8a84..b0570a1 100644 --- a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java +++ b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java @@ -17,7 +17,6 @@ package org.apache.commons.pool2.impl; import java.time.Duration; -import java.time.Instant; import java.util.ArrayList; import java.util.Deque; import java.util.HashMap; @@ -1436,27 +1435,10 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T> @SuppressWarnings("resource") // PrintWriter is managed elsewhere private void removeAbandoned(final AbandonedConfig abandonedConfig) { for (final Entry<K, GenericKeyedObjectPool<K, T>.ObjectDeque<T>> pool : poolMap.entrySet()) { - final Map<IdentityWrapper<T>, PooledObject<T>> allObjects = pool.getValue().getAllObjects(); - // Generate a list of abandoned objects to remove - final Instant timeout = Instant.now().minus(abandonedConfig.getRemoveAbandonedTimeoutDuration()); - final ArrayList<PooledObject<T>> remove = new ArrayList<>(); - final Iterator<PooledObject<T>> it = allObjects.values().iterator(); - while (it.hasNext()) { - final PooledObject<T> pooledObject = it.next(); - synchronized (pooledObject) { - if (pooledObject.getState() == PooledObjectState.ALLOCATED && - pooledObject.getLastUsedInstant().compareTo(timeout) <= 0) { - pooledObject.markAbandoned(); - remove.add(pooledObject); - } - } - } - + final ArrayList<PooledObject<T>> remove = createRemoveList(abandonedConfig, pool.getValue().getAllObjects()); // Now remove the abandoned objects - final Iterator<PooledObject<T>> itr = remove.iterator(); - while (itr.hasNext()) { - final PooledObject<T> pooledObject = itr.next(); + remove.forEach(pooledObject -> { if (abandonedConfig.getLogAbandoned()) { pooledObject.printStackTrace(abandonedConfig.getLogWriter()); } @@ -1465,7 +1447,7 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T> } catch (final Exception e) { swallowException(e); } - } + }); } } diff --git a/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java b/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java index 0014460..e6405f6 100644 --- a/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java +++ b/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java @@ -20,12 +20,12 @@ import java.time.Duration; import java.time.Instant; import java.util.ArrayList; import java.util.HashSet; -import java.util.Iterator; import java.util.Map; import java.util.NoSuchElementException; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Collectors; import org.apache.commons.pool2.DestroyMode; import org.apache.commons.pool2.ObjectPool; @@ -896,13 +896,6 @@ public class GenericObjectPool<T> extends BaseGenericObjectPool<T> return 0; } - //--- Usage tracking support ----------------------------------------------- - - - - - //--- JMX support ---------------------------------------------------------- - /** * {@inheritDoc} * <p> @@ -963,12 +956,7 @@ public class GenericObjectPool<T> extends BaseGenericObjectPool<T> */ @Override public Set<DefaultPooledObjectInfo> listAllObjects() { - final Set<DefaultPooledObjectInfo> result = - new HashSet<>(allObjects.size()); - for (final PooledObject<T> p : allObjects.values()) { - result.add(new DefaultPooledObjectInfo(p)); - } - return result; + return allObjects.values().stream().map(DefaultPooledObjectInfo::new).collect(Collectors.toSet()); } /** * Tries to ensure that {@link #getMinIdle()} idle instances are available @@ -993,24 +981,9 @@ public class GenericObjectPool<T> extends BaseGenericObjectPool<T> @SuppressWarnings("resource") // PrintWriter is managed elsewhere private void removeAbandoned(final AbandonedConfig abandonedConfig) { // Generate a list of abandoned objects to remove - final Instant timeout = Instant.now().minus(abandonedConfig.getRemoveAbandonedTimeoutDuration()); - final ArrayList<PooledObject<T>> remove = new ArrayList<>(); - final Iterator<PooledObject<T>> it = allObjects.values().iterator(); - while (it.hasNext()) { - final PooledObject<T> pooledObject = it.next(); - synchronized (pooledObject) { - if (pooledObject.getState() == PooledObjectState.ALLOCATED && - pooledObject.getLastUsedInstant().compareTo(timeout) <= 0) { - pooledObject.markAbandoned(); - remove.add(pooledObject); - } - } - } - + final ArrayList<PooledObject<T>> remove = createRemoveList(abandonedConfig, allObjects); // Now remove the abandoned objects - final Iterator<PooledObject<T>> itr = remove.iterator(); - while (itr.hasNext()) { - final PooledObject<T> pooledObject = itr.next(); + remove.forEach(pooledObject -> { if (abandonedConfig.getLogAbandoned()) { pooledObject.printStackTrace(abandonedConfig.getLogWriter()); } @@ -1019,7 +992,7 @@ public class GenericObjectPool<T> extends BaseGenericObjectPool<T> } catch (final Exception e) { swallowException(e); } - } + }); } /** diff --git a/src/main/java/org/apache/commons/pool2/impl/SoftReferenceObjectPool.java b/src/main/java/org/apache/commons/pool2/impl/SoftReferenceObjectPool.java index f7c271c..5a3b526 100644 --- a/src/main/java/org/apache/commons/pool2/impl/SoftReferenceObjectPool.java +++ b/src/main/java/org/apache/commons/pool2/impl/SoftReferenceObjectPool.java @@ -22,6 +22,7 @@ import java.lang.ref.SoftReference; import java.util.ArrayList; import java.util.Iterator; import java.util.NoSuchElementException; +import java.util.Optional; import org.apache.commons.pool2.BaseObjectPool; import org.apache.commons.pool2.ObjectPool; @@ -232,17 +233,15 @@ public class SoftReferenceObjectPool<T> extends BaseObjectPool<T> { @Override public synchronized void clear() { if (null != factory) { - final Iterator<PooledSoftReference<T>> iter = idleReferences.iterator(); - while (iter.hasNext()) { + idleReferences.forEach(ref -> { try { - final PooledSoftReference<T> ref = iter.next(); if (null != ref.getObject()) { factory.destroyObject(ref); } } catch (final Exception e) { // ignore error, keep destroying the rest } - } + }); } idleReferences.clear(); pruneClearedReferences(); @@ -290,14 +289,9 @@ public class SoftReferenceObjectPool<T> extends BaseObjectPool<T> { * @return PooledSoftReference wrapping a soft reference to obj */ private PooledSoftReference<T> findReference(final T obj) { - final Iterator<PooledSoftReference<T>> iterator = allReferences.iterator(); - while (iterator.hasNext()) { - final PooledSoftReference<T> reference = iterator.next(); - if (reference.getObject() != null && reference.getObject().equals(obj)) { - return reference; - } - } - return null; + final Optional<PooledSoftReference<T>> first = allReferences.stream() + .filter(reference -> reference.getObject() != null && reference.getObject().equals(obj)).findFirst(); + return first.isPresent() ? first.get() : null; } /**