docs: public static<R> R execute(Transactional<R> exe, TransactionalProvider provider, TimestampProvider times) throws BackendException {
          StoreTransaction txh = null;
          try {
              txh = provider.openTx();
              if (!txh.getConfiguration().hasCommitTime()) txh.getConfiguration().setCommitTime(times.getTime());
              return exe.call(txh);
          } catch (BackendException e) {
              if (txh!=null) txh.rollback();
              txh=null;
              throw e;
          } finally {
              if (txh!=null) txh.commit();
          }
      }