/**
   * Commits this transaction with {@value #COMMIT_RETRIES} times of retries.
   *
   * <p><b>Throws</b>:<br>
   * {@link java.util.ConcurrentModificationException} - if commits failed
   *
   * @see #COMMIT_RETRIES
   */
  @Override
  public void commit() {
    int retries = COMMIT_RETRIES;

    while (true) {
      try {
        appEngineDatastoreTx.commit();

        GAERepository.TX.set(null);

        break;
      } catch (final ConcurrentModificationException e) {
        if (retries == 0) {
          throw e;
        }

        --retries;
        LOGGER.log(
            Level.WARN,
            "Retrying to commit this transaction[id={0}, app={1}]",
            new Object[] {appEngineDatastoreTx.getId(), appEngineDatastoreTx.getApp()});
      }
    }
  }
  @Override
  public void rollback() {
    appEngineDatastoreTx.rollback();

    GAERepository.TX.set(null);
  }