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
commit 987f5b1b3550c1d7ec0dd38610b4df6f49883bd7 Author: Gary Gregory <[email protected]> AuthorDate: Wed Jan 21 02:52:43 2026 +0000 Add DefaultPooledObjectInfo.pooledObject() --- .../apache/commons/pool3/impl/DefaultPooledObjectInfo.java | 13 +++++++++++++ .../commons/pool3/impl/TestBaseGenericObjectPool.java | 7 +++++-- .../commons/pool3/impl/TestDefaultPooledObjectInfo.java | 11 +++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/commons/pool3/impl/DefaultPooledObjectInfo.java b/src/main/java/org/apache/commons/pool3/impl/DefaultPooledObjectInfo.java index 5bf1647f..f95646b7 100644 --- a/src/main/java/org/apache/commons/pool3/impl/DefaultPooledObjectInfo.java +++ b/src/main/java/org/apache/commons/pool3/impl/DefaultPooledObjectInfo.java @@ -101,6 +101,19 @@ public class DefaultPooledObjectInfo implements DefaultPooledObjectInfoMBean { return new SimpleDateFormat(PATTERN).format(Long.valueOf(millis)); } + /** + * Gets the pooled object for debugging, use at your own risk, changing the state of this object may have unintended consequences for the pool. + * <p> + * This can't be a traditional getter as that would expose the pooled object via JMX. + * </p> + * + * @return the pooled object for debugging, use at your own risk, changing the state of this object may have unintended consequences for the pool. + * @since 2.14.0 + */ + public PooledObject<?> pooledObject() { + return pooledObject; + } + /** * @since 2.4.3 */ diff --git a/src/test/java/org/apache/commons/pool3/impl/TestBaseGenericObjectPool.java b/src/test/java/org/apache/commons/pool3/impl/TestBaseGenericObjectPool.java index caeb2d85..2e0055af 100644 --- a/src/test/java/org/apache/commons/pool3/impl/TestBaseGenericObjectPool.java +++ b/src/test/java/org/apache/commons/pool3/impl/TestBaseGenericObjectPool.java @@ -19,6 +19,7 @@ package org.apache.commons.pool3.impl; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import java.lang.management.ManagementFactory; @@ -134,11 +135,13 @@ class TestBaseGenericObjectPool { void testJMXRegistrationLatency() { final int numPools = 1000; final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); - final ArrayList<GenericObjectPool<Waiter, IllegalStateException>> pools = new ArrayList<>(); + final ArrayList<GenericObjectPool<Waiter, ?>> pools = new ArrayList<>(); try { // final long startTime = System.currentTimeMillis(); for (int i = 0; i < numPools; i++) { - pools.add(new GenericObjectPool<>(new WaiterFactory<>(0, 0, 0, 0, 0, 0), new GenericObjectPoolConfig<>())); + final GenericObjectPool<Waiter, ?> gop = new GenericObjectPool<>(new WaiterFactory<>(0, 0, 0, 0, 0, 0), new GenericObjectPoolConfig<>()); + assertNotNull(gop.getJmxName()); + pools.add(gop); } // System.out.println("Duration: " + (System.currentTimeMillis() - startTime)); final ObjectName oname = pools.get(numPools - 1).getJmxName(); diff --git a/src/test/java/org/apache/commons/pool3/impl/TestDefaultPooledObjectInfo.java b/src/test/java/org/apache/commons/pool3/impl/TestDefaultPooledObjectInfo.java index 0e793465..1e181c38 100644 --- a/src/test/java/org/apache/commons/pool3/impl/TestDefaultPooledObjectInfo.java +++ b/src/test/java/org/apache/commons/pool3/impl/TestDefaultPooledObjectInfo.java @@ -45,6 +45,17 @@ class TestDefaultPooledObjectInfo { } } + @Test + void testGetPooledObject() throws Exception { + try (GenericObjectPool<String, TestException> pool = new GenericObjectPool<>(new SimpleFactory())) { + pool.borrowObject(); + final Set<DefaultPooledObjectInfo> strings = pool.listAllObjects(); + assertEquals(1, strings.size()); + final DefaultPooledObjectInfo s1Info = strings.iterator().next(); + assertEquals("0", s1Info.pooledObject().getObject()); + } + } + @Test void testGetPooledObjectToString() throws Exception { try (GenericObjectPool<String, TestException> pool = new GenericObjectPool<>(new SimpleFactory())) {
