java.sql.Connection is interface, not a class, so the thing you got from pool is not actually the same what you got directly creating connection. When you call close on connection from pool, pool returns REAL connection to pool, so it become available for further reuse.