A few random notes:
If I were you I'd check the source and API of Apache Commons Pool. You could borrow ideas about possible errors, corner cases, useful API calls, parameters etc.
surrenderConnectionshould rollback unfinished transactions. They could leak.SLF4J has better API than JUL. (Check Logback also, if you don't familiar with it.)
A malciousmalicious (or poorly written client with multiple pools) can call
surrenderConnectionwith a PooledConnectionPooledConnectioninstance which was not created by the calledConnectionPool.I'd check
nulls in the constructors/methods. Does it make sense to call them withnull? If not, check it and throw an exception. checkNotNull in Guava is a great choice for that.this.connectionPool = checkNotNull(connectionPool, "connectionPool cannot be null");
(Also see: Effective Java, 2nd edition, Item 38: Check parameters for validity)