docs: protected boolean _requeueWithRetries(Connection conn, IQueueMessage<ID, DATA> msg,
              int numRetries, int maxRetries) {
          try {
              jdbcHelper.startTransaction(conn);
              conn.setTransactionIsolation(transactionIsolationLevel);
              if (!isEphemeralDisabled()) {
                  removeFromEphemeralStorage(conn, msg);
              }
              Date now = new Date();
              msg.incNumRequeues().setQueueTimestamp(now);
              boolean result = putToQueueStorage(conn, msg);
              jdbcHelper.commitTransaction(conn);
              return result;
          } catch (DuplicatedValueException dve) {
              jdbcHelper.rollbackTransaction(conn);
              LOGGER.warn(dve.getMessage(), dve);
              return true;
          } catch (DaoException de) {
              if (de.getCause() instanceof DuplicateKeyException) {
                  jdbcHelper.rollbackTransaction(conn);
                  LOGGER.warn(de.getMessage(), de);
                  return true;
              }
              if (de.getCause() instanceof ConcurrencyFailureException) {
                  jdbcHelper.rollbackTransaction(conn);
                  if (numRetries > maxRetries) {
                      throw new QueueException(de);
                  } else {
                      /*
                       * call _requeueSilentWithRetries(...) here is correct
                       * because we do not want message's num-requeues is
                       * increased with every retry
                       */
                      incRetryCounter("_requeueWithRetries");
                      return _requeueSilentWithRetries(conn, msg, numRetries + 1, maxRetries);
                  }
              }
              throw de;
          } catch (Exception e) {
              jdbcHelper.rollbackTransaction(conn);
              throw e instanceof QueueException ? (QueueException) e : new QueueException(e);
          }
      }