I don't like this part, because new client exception is created here. We could just add connection exception to client exception, but there will be no chance to change client exception message, cause it can be set only through constructor. One of the ideas came to me is not to throw Client exception in getConnection() method and just return null, and throw ClientException in request method if getConnection returned null.

And maybe there should be different client exception messages then there is no active connections and when where were active connection on start of request but they all failed.