code: @Override
      public Connection getConnection(ConnectionRequestContext requestContext) throws SQLException {
          long startNanos = System.nanoTime();
          try {
              Credentials credentials = requestContext.getCredentials();
              return (credentials == null) ?
                      targetDataSource.getConnection() :
                      targetDataSource.getConnection(credentials.getUsername(), credentials.getPassword());
          } catch (SQLException e) {
              throw translateException(e);
          } catch (RuntimeException e) {
              throw translateException(e);
          } finally {
              long endNanos = System.nanoTime();
              connectionAcquireTimer.update(TimeUnit.NANOSECONDS.toMillis(endNanos - startNanos), TimeUnit.MILLISECONDS);
          }
      }
docs: Get a connection from the targeted data source using the supplied Credentials.
  The acquiring time is stored in the {@link AbstractPoolAdapter#connectionAcquireTimer}.
  
  @param requestContext connection request context
  @return connection
  @throws SQLException if a pool or a database error occurs