You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2025/06/10 17:54:44 UTC
(commons-pool) branch POOL_2_X updated (6ee92988 -> 6b7c8e0d)
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a change to branch POOL_2_X
in repository https://gitbox.apache.org/repos/asf/commons-pool.git
from 6ee92988 Fix typo in comment
new 9bf05020 Use try with resources
new 222ca987 Fix typo in comment
new a745f6b9 Use final
new 09c78135 >Add org.apache.commons.pool2.PooledObject.nonNull(PooledObject)
new 6b7c8e0d Add missing @Deprecated
The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
pom.xml | 8 ++--
src/changes/changes.xml | 3 +-
.../org/apache/commons/pool2/PooledObject.java | 15 +++++++-
.../commons/pool2/impl/GenericKeyedObjectPool.java | 8 ++--
.../commons/pool2/impl/GenericObjectPool.java | 5 ++-
...ledObjectFactory.java => PooledObjectTest.java} | 30 +++++++--------
.../pool2/impl/TestGenericKeyedObjectPool.java | 43 ++++++++++------------
.../pool2/pool407/AbstractKeyedPool407Factory.java | 2 +-
.../pool2/pool407/AbstractPool407Factory.java | 2 +-
9 files changed, 61 insertions(+), 55 deletions(-)
copy src/test/java/org/apache/commons/pool2/{TestBaseKeyedPooledObjectFactory.java => PooledObjectTest.java} (57%)
(commons-pool) 05/05: Add missing @Deprecated
Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch POOL_2_X
in repository https://gitbox.apache.org/repos/asf/commons-pool.git
commit 6b7c8e0d0636edb8d5f51142bd40ecfc30cd14c6
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jun 10 13:54:38 2025 -0400
Add missing @Deprecated
---
src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java | 1 +
1 file changed, 1 insertion(+)
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 e86e8384..cb6941cc 100644
--- a/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
+++ b/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
@@ -413,6 +413,7 @@ public class GenericObjectPool<T> extends BaseGenericObjectPool<T>
* error
* @deprecated Use {@link #borrowObject(Duration)}.
*/
+ @Deprecated
public T borrowObject(final long maxWaitMillis) throws Exception {
return borrowObject(Duration.ofMillis(maxWaitMillis));
}
(commons-pool) 04/05: >Add org.apache.commons.pool2.PooledObject.nonNull(PooledObject)
Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch POOL_2_X
in repository https://gitbox.apache.org/repos/asf/commons-pool.git
commit 09c781359a2d3558711635ded47a7453f6ea5545
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jun 10 13:54:23 2025 -0400
>Add org.apache.commons.pool2.PooledObject.nonNull(PooledObject)
---
pom.xml | 8 +++---
src/changes/changes.xml | 3 ++-
.../org/apache/commons/pool2/PooledObject.java | 15 +++++++++--
.../commons/pool2/impl/GenericKeyedObjectPool.java | 8 +++---
.../commons/pool2/impl/GenericObjectPool.java | 4 +--
...edPool407Factory.java => PooledObjectTest.java} | 30 ++++++++++++++--------
.../pool2/pool407/AbstractKeyedPool407Factory.java | 2 +-
.../pool2/pool407/AbstractPool407Factory.java | 2 +-
8 files changed, 46 insertions(+), 26 deletions(-)
diff --git a/pom.xml b/pom.xml
index d988fc43..f51c8a04 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
<version>81</version>
</parent>
<artifactId>commons-pool2</artifactId>
- <version>2.12.2-SNAPSHOT</version>
+ <version>2.13.0-SNAPSHOT</version>
<name>Apache Commons Pool</name>
<inceptionYear>2001</inceptionYear>
<description>The Apache Commons Object Pooling Library.</description>
@@ -92,8 +92,8 @@
<commons.rc.version>RC3</commons.rc.version>
<checkstyle.suppress.file>${basedir}/src/conf/checkstyle-suppressions.xml</checkstyle.suppress.file>
<!-- Java 8 -->
- <commons.release.version>2.12.1</commons.release.version>
- <commons.release.next>2.12.2</commons.release.next>
+ <commons.release.version>2.13.0</commons.release.version>
+ <commons.release.next>2.13.1</commons.release.next>
<commons.release.desc>(Java 8 or above)</commons.release.desc>
<!-- Java 7 -->
<commons.release.2.version>2.6.2</commons.release.2.version>
@@ -103,7 +103,7 @@
<commons.scmPubCheckoutDirectory>site-content</commons.scmPubCheckoutDirectory>
<commons.osgi.import>net.sf.cglib.proxy;resolution:=optional,*</commons.osgi.import>
<!-- Commons Release Plugin -->
- <commons.bc.version>2.12.0</commons.bc.version>
+ <commons.bc.version>2.12.1</commons.bc.version>
<commons.release.isDistModule>true</commons.release.isDistModule>
<japicmp.skip>false</japicmp.skip>
<spotbugs.skip>false</spotbugs.skip>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 4c4b1abd..0a68f635 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -45,7 +45,7 @@ The <action> type attribute can be add,update,fix,remove.
<title>Apache Commons Pool Release Notes</title>
</properties>
<body>
- <release version="2.12.2" date="YYYY-MM-DD" description="This is a feature and maintenance release. Java 8 or later is required.">
+ <release version="2.13.0" date="YYYY-MM-DD" description="This is a feature and maintenance release. Java 8 or later is required.">
<!-- FIX -->
<action type="fix" issue="POOL-290" dev="psteitz" due-to="Serge Angelov">TestSoftRefOutOfMemory (unit test) can loop infinitely on failure.</action>
<action type="fix" issue="POOL-419" dev="psteitz" due-to="Raju Gupta, Phil Steitz">GenericObjectPool counters and object collections can be corrupted when returnObject and invalidate are invoked concurrently by client threads on the same pooled object.</action>
@@ -62,6 +62,7 @@ The <action> type attribute can be add,update,fix,remove.
<action type="fix" dev="ggregory" due-to="Gary Gregory">Operation on the "idleHighWaterMark" shared variable in "ErodingFactor" class is not atomic [org.apache.commons.pool2.PoolUtils$ErodingFactor] At PoolUtils.java:[line 98] AT_NONATOMIC_OPERATIONS_ON_SHARED_VARIABLE.</action>
<action type="fix" dev="ggregory" due-to="Gary Gregory">org.apache.commons.pool2.impl.GenericObjectPool.create(Duration) should normalize a negative duration to zero.</action>
<!-- ADD -->
+ <action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.pool2.PooledObject.nonNull(PooledObject).</action>
<!-- UPDATE -->
<action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 79 to 81.</action>
</release>
diff --git a/src/main/java/org/apache/commons/pool2/PooledObject.java b/src/main/java/org/apache/commons/pool2/PooledObject.java
index c9a2b578..c76871e1 100644
--- a/src/main/java/org/apache/commons/pool2/PooledObject.java
+++ b/src/main/java/org/apache/commons/pool2/PooledObject.java
@@ -34,16 +34,27 @@ import java.util.Deque;
public interface PooledObject<T> extends Comparable<PooledObject<T>> {
/**
- * Tests whether the given PooledObject is null <em>or</em> contains a null.
+ * Tests whether the given PooledObject is null <em>or</em> wraps a null.
*
* @param pooledObject the PooledObject to test.
- * @return whether the given PooledObject is null <em>or</em> contains a null.
+ * @return whether the given PooledObject is null <em>or</em> wraps a null.
* @since 2.12.0
*/
static boolean isNull(final PooledObject<?> pooledObject) {
return pooledObject == null || pooledObject.getObject() == null;
}
+ /**
+ * Tests whether the given PooledObject isn't null <em>and</em> doesn't wraps a null.
+ *
+ * @param pooledObject the PooledObject to test.
+ * @return whether the given PooledObject isn't null <em>and</em> doesn't wraps a null.
+ * @since 2.13.0
+ */
+ static boolean nonNull(final PooledObject<?> pooledObject) {
+ return pooledObject != null && pooledObject.getObject() != null;
+ }
+
/**
* Allocates the object.
*
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 5c43b097..4895f2ca 100644
--- a/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
+++ b/src/main/java/org/apache/commons/pool2/impl/GenericKeyedObjectPool.java
@@ -297,7 +297,7 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
* @throws Exception If the associated factory fails to passivate the object
*/
private void addIdleObject(final K key, final PooledObject<T> p) throws Exception {
- if (!PooledObject.isNull(p)) {
+ if (PooledObject.nonNull(p)) {
factory.passivateObject(key, p);
final LinkedBlockingDeque<PooledObject<T>> idleObjects = poolMap.get(key).getIdleObjects();
if (getLifo()) {
@@ -445,7 +445,7 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
p = objectDeque.getIdleObjects().pollFirst();
if (p == null) {
p = create(key, remainingWaitDuration);
- if (!PooledObject.isNull(p)) {
+ if (PooledObject.nonNull(p)) {
create = true;
}
remainingWaitDuration = maxWaitDuration.minus(durationSince(startInstant));
@@ -466,7 +466,7 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
p = null;
}
- if (!PooledObject.isNull(p)) {
+ if (PooledObject.nonNull(p)) {
try {
factory.activateObject(key, p);
} catch (final Exception e) {
@@ -483,7 +483,7 @@ public class GenericKeyedObjectPool<K, T> extends BaseGenericObjectPool<T>
throw nsee;
}
}
- if (!PooledObject.isNull(p) && getTestOnBorrow()) {
+ if (PooledObject.nonNull(p) && getTestOnBorrow()) {
boolean validate = false;
Throwable validationThrowable = null;
try {
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 d40f67fb..e86e8384 100644
--- a/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
+++ b/src/main/java/org/apache/commons/pool2/impl/GenericObjectPool.java
@@ -186,7 +186,7 @@ public class GenericObjectPool<T> extends BaseGenericObjectPool<T>
* @throws Exception If the factory fails to passivate the object
*/
private void addIdleObject(final PooledObject<T> p) throws Exception {
- if (!PooledObject.isNull(p)) {
+ if (PooledObject.nonNull(p)) {
factory.passivateObject(p);
if (getLifo()) {
idleObjects.addFirst(p);
@@ -300,7 +300,7 @@ public class GenericObjectPool<T> extends BaseGenericObjectPool<T>
p = idleObjects.pollFirst();
if (p == null) {
p = create(remainingWaitDuration);
- if (!PooledObject.isNull(p)) {
+ if (PooledObject.nonNull(p)) {
create = true;
}
}
diff --git a/src/test/java/org/apache/commons/pool2/pool407/AbstractKeyedPool407Factory.java b/src/test/java/org/apache/commons/pool2/PooledObjectTest.java
similarity index 51%
copy from src/test/java/org/apache/commons/pool2/pool407/AbstractKeyedPool407Factory.java
copy to src/test/java/org/apache/commons/pool2/PooledObjectTest.java
index 9f2001e4..634bfa45 100644
--- a/src/test/java/org/apache/commons/pool2/pool407/AbstractKeyedPool407Factory.java
+++ b/src/test/java/org/apache/commons/pool2/PooledObjectTest.java
@@ -15,22 +15,30 @@
* limitations under the License.
*/
-package org.apache.commons.pool2.pool407;
+package org.apache.commons.pool2;
-import org.apache.commons.pool2.BaseKeyedPooledObjectFactory;
-import org.apache.commons.pool2.PooledObject;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.apache.commons.pool2.impl.DefaultPooledObject;
+import org.junit.jupiter.api.Test;
/**
- * Tests POOL-407.
+ * Tests {@link PooledObject}.
*/
-public abstract class AbstractKeyedPool407Factory extends BaseKeyedPooledObjectFactory<String, KeyedPool407Fixture> {
-
- abstract boolean isDefaultMakeObject();
+public class PooledObjectTest {
- @Override
- public boolean validateObject(final String key, final PooledObject<KeyedPool407Fixture> p) {
- // TODO Should this be enough even if wrap() does throw and returns a DefaultPooledObject wrapping a null?
- return !PooledObject.isNull(p);
+ @Test
+ void testIsNull() {
+ assertTrue(PooledObject.isNull(null));
+ assertTrue(PooledObject.isNull(new DefaultPooledObject<>(null)));
+ assertFalse(PooledObject.isNull(new DefaultPooledObject<>("a")));
}
+ @Test
+ void testNonNull() {
+ assertFalse(PooledObject.nonNull(null));
+ assertFalse(PooledObject.nonNull(new DefaultPooledObject<>(null)));
+ assertTrue(PooledObject.nonNull(new DefaultPooledObject<>("a")));
+ }
}
diff --git a/src/test/java/org/apache/commons/pool2/pool407/AbstractKeyedPool407Factory.java b/src/test/java/org/apache/commons/pool2/pool407/AbstractKeyedPool407Factory.java
index 9f2001e4..c9b2706c 100644
--- a/src/test/java/org/apache/commons/pool2/pool407/AbstractKeyedPool407Factory.java
+++ b/src/test/java/org/apache/commons/pool2/pool407/AbstractKeyedPool407Factory.java
@@ -30,7 +30,7 @@ public abstract class AbstractKeyedPool407Factory extends BaseKeyedPooledObjectF
@Override
public boolean validateObject(final String key, final PooledObject<KeyedPool407Fixture> p) {
// TODO Should this be enough even if wrap() does throw and returns a DefaultPooledObject wrapping a null?
- return !PooledObject.isNull(p);
+ return PooledObject.nonNull(p);
}
}
diff --git a/src/test/java/org/apache/commons/pool2/pool407/AbstractPool407Factory.java b/src/test/java/org/apache/commons/pool2/pool407/AbstractPool407Factory.java
index 2f2b6b43..f8e3310f 100644
--- a/src/test/java/org/apache/commons/pool2/pool407/AbstractPool407Factory.java
+++ b/src/test/java/org/apache/commons/pool2/pool407/AbstractPool407Factory.java
@@ -43,7 +43,7 @@ public abstract class AbstractPool407Factory extends BasePooledObjectFactory<Poo
@Override
public boolean validateObject(final PooledObject<Pool407Fixture> p) {
// TODO Should this be enough even if wrap() does throw and returns a DefaultPooledObject wrapping a null?
- return !PooledObject.isNull(p);
+ return PooledObject.nonNull(p);
}
}
(commons-pool) 01/05: Use try with resources
Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch POOL_2_X
in repository https://gitbox.apache.org/repos/asf/commons-pool.git
commit 9bf0502021c76dc9ac54e313c05ef4b84d74c449
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jun 10 13:10:28 2025 -0400
Use try with resources
---
.../pool2/impl/TestGenericKeyedObjectPool.java | 39 ++++++++++------------
1 file changed, 18 insertions(+), 21 deletions(-)
diff --git a/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java b/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
index da15c3e4..f7dbd0d1 100644
--- a/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
+++ b/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
@@ -2109,28 +2109,25 @@ public class TestGenericKeyedObjectPool extends AbstractTestKeyedObjectPool {
factory.makeLatency = 500;
factory.setValidationEnabled(true); // turn on factory-level validatiom
factory.setValid(false); // make validation fail uniformly
- final GenericKeyedObjectPool<String, String> pool = new GenericKeyedObjectPool<>(factory);
-
- pool.setBlockWhenExhausted(true);
- pool.setMaxWait(maxWaitDuration);
- pool.setMaxTotalPerKey(1);
- pool.setMaxTotal(1);
- pool.setTestOnCreate(true);
- final Instant startTime = Instant.now();
-
- // Try to borrow an object. Validation will fail.
- // Then we will wait on the pool.
- try {
- pool.borrowObject("a");
- } catch (NoSuchElementException ex) {
- // expected
+ try (GenericKeyedObjectPool<String, String> pool = new GenericKeyedObjectPool<>(factory)) {
+ pool.setBlockWhenExhausted(true);
+ pool.setMaxWait(maxWaitDuration);
+ pool.setMaxTotalPerKey(1);
+ pool.setMaxTotal(1);
+ pool.setTestOnCreate(true);
+ final Instant startTime = Instant.now();
+ // Try to borrow an object. Validation will fail.
+ // Then we will wait on the pool.
+ try {
+ pool.borrowObject("a");
+ } catch (NoSuchElementException ex) {
+ // expected
+ }
+ // Should have timed out after 1000 ms from the start time
+ final Duration duration = Duration.between(startTime, Instant.now());
+ assertTrue(duration.toMillis() < maxWaitDuration.toMillis() + 10, // allow for some timing delay
+ "Thread A should have timed out after " + maxWaitDuration.toMillis() + " ms, but took " + duration.toMillis() + " ms");
}
-
- // Should have timed out after 1000 ms from the start time
- final Duration duration = Duration.between(startTime, Instant.now());
- assertTrue(duration.toMillis() < maxWaitDuration.toMillis() + 10, // allow for some timing delay
- "Thread A should have timed out after " + maxWaitDuration.toMillis() + " ms, but took " + duration.toMillis() + " ms");
- pool.close();
}
@Test
(commons-pool) 02/05: Fix typo in comment
Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch POOL_2_X
in repository https://gitbox.apache.org/repos/asf/commons-pool.git
commit 222ca98799d3c10269268a68e4f85c3b87d218a9
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jun 10 13:11:38 2025 -0400
Fix typo in comment
---
.../java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java b/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
index f7dbd0d1..648226f2 100644
--- a/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
+++ b/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
@@ -2107,7 +2107,7 @@ public class TestGenericKeyedObjectPool extends AbstractTestKeyedObjectPool {
final Duration maxWaitDuration = Duration.ofSeconds(1);
final SimpleFactory<String> factory = new SimpleFactory<>();
factory.makeLatency = 500;
- factory.setValidationEnabled(true); // turn on factory-level validatiom
+ factory.setValidationEnabled(true); // turn on factory-level validation
factory.setValid(false); // make validation fail uniformly
try (GenericKeyedObjectPool<String, String> pool = new GenericKeyedObjectPool<>(factory)) {
pool.setBlockWhenExhausted(true);
(commons-pool) 03/05: Use final
Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch POOL_2_X
in repository https://gitbox.apache.org/repos/asf/commons-pool.git
commit a745f6b9ef4d7261642c56bef84567ed8688f2af
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jun 10 13:16:59 2025 -0400
Use final
---
.../org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java b/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
index 648226f2..91e3f97c 100644
--- a/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
+++ b/src/test/java/org/apache/commons/pool2/impl/TestGenericKeyedObjectPool.java
@@ -318,7 +318,7 @@ public class TestGenericKeyedObjectPool extends AbstractTestKeyedObjectPool {
public void run() {
try {
pool.returnObject(key, pool.borrowObject(key));
- } catch (Exception e) {
+ } catch (final Exception e) {
// Ignore
}
}
@@ -2120,7 +2120,7 @@ public class TestGenericKeyedObjectPool extends AbstractTestKeyedObjectPool {
// Then we will wait on the pool.
try {
pool.borrowObject("a");
- } catch (NoSuchElementException ex) {
+ } catch (final NoSuchElementException ex) {
// expected
}
// Should have timed out after 1000 ms from the start time