docs: public void startReporting() {
  
          // make sure we report the lifecycle event only once
          if (startupEventReported == true) {
              logger.error("startup event has already been reported or is being reported now");
              return;
          }
  
          startupEventReported = true;
  
          // the startup event has to be reported in its own thread, as this is
          // done forever. Otherwise a servlet will hang in startup mode forever
          // and can't be stopped by normal admin commands.
          Callable<Boolean> reportEventCallable = new Callable<Boolean>() {
  
              public Boolean call() {
                  try {
                      // Notify BPC of BP startup event in a loop.
                      if (reportEventLoop()) {
                          // reporting successful within the allowed number of
                          // retries
                          return true;
                      }
  
                      // The BPC could not be reached, so return.
                      logger.error("Bounce Proxy lifecycle event notification failed. Exiting.");
  
                  } catch (Exception e) {
                      logger.error("Uncaught exception in reporting lifecycle event.", e);
                  }
                  startupEventReported = false;
                  return false;
              }
          };
  
          // don't wait for the callable to end so that shutting down is possible
          // at any time
          startupReportFuture = execService.submit(reportEventCallable);
          startupReportFutureAvailable.release();
      }