docs: public synchronized void store(final ChangeLog changeLog) throws ItemStateException {
          int failures = 0;
          ItemStateException lastException = null;
          boolean sleepInterrupted = false;
          while (!sleepInterrupted && (blockOnConnectionLoss || failures <= 1)) {
              try {
                  conHelper.startBatch();
                  super.store(changeLog);
                  conHelper.endBatch(true);
                  return;
              } catch (SQLException e) {
                  // Either startBatch or stopBatch threw it: either way the
                  // transaction was not persisted and no action needs to be taken.
                  lastException = new ItemStateException(e.getMessage(), e);
              } catch (ItemStateException e) {
                  // store call threw it: we need to cancel the transaction
                  lastException = e;
                  try {
                      conHelper.endBatch(false);
                  } catch (SQLException e2) {
                      DbUtility.logException("rollback failed", e2);
                  }
  
                  // if we got here due to a constraint violation and we
                  // are running in test mode, we really want to stop
                  assert !isIntegrityConstraintViolation(e.getCause());
              }
              failures++;
              log.error("Failed to persist ChangeLog (stacktrace on DEBUG log level), blockOnConnectionLoss = "
                      + blockOnConnectionLoss + ": " + lastException);
              log.debug("Failed to persist ChangeLog", lastException);
              if (blockOnConnectionLoss || failures <= 1) { // if we're going to try again
                  try {
                      Thread.sleep(100);
                  } catch (InterruptedException e1) {
                      Thread.currentThread().interrupt();
                      sleepInterrupted = true;
                      log.error("Interrupted: canceling retry of ChangeLog storage");
                  }
              }
          }
          throw lastException;
      }