code: protected boolean isURLAvailable(URL url, int retryCount) throws IOException {
          boolean serviceFound = false;
          for (int i = 0; i < retryCount; i++) {
              HttpURLConnection connection = (HttpURLConnection) url.openConnection();
              connection.setRequestMethod("HEAD");
              int responseCode = connection.getResponseCode();
              if (200 <= responseCode && responseCode <= 399) {
                  log.debug(String.format("Got a valid response of %d from %s", responseCode, url));
                  serviceFound = true;
                  break;
              } else if (i + 1 < retryCount) { // only sleep if not on last iteration
                  try {
                      log.debug("Sleeping while waiting for sonar to become available");
                      Thread.sleep(2000);
                  } catch (InterruptedException e) {
                      // do nothing
                  }
              }
          }
          return serviceFound;
      }
docs: Pings a HTTP URL. This effectively sends a HEAD request and returns <code>true</code> if the response code is in
  the 200-399 range.
  
  @param url        The HTTP URL to be pinged.
  @param retryCount How many times to check for sonar before giving up
  @return <code>true</code> if the given HTTP URL has returned response code 200-399 on a HEAD request,
  otherwise <code>false</code>.
  @throws IOException If the sonar server is not available