code: protected <R> R inTx(TransactionPayload<R, BE> payload) {
          return inTx(context, payload);
      }
docs: Runs the payload in transaction. It is the payload's responsibility to commit the transaction at some point
  during its execution. If the payload throws an exception the transaction is automatically rolled back and
  the exception rethrown.
  <p>
  <p><b>WARNING:</b> the payload might be called multiple times if the transaction it runs within fails. It is
  therefore dangerous to keep any mutable state outside of the payload function that the function depends on.
  
  @param payload the payload to execute in transaction
  @param <R>     the return type
  @return the return value provided by the payload