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())) {

Reply via email to