code: public <T> T doInTransaction(final TxConfig config,
                                   final SpecificTxAction<T, C> action) {
          return template.doInTransaction(config, new TxAction<T>() {
              @Override
              public T execute() throws Throwable {
                  return action.execute(provider.get());
              }
          });
      }
docs: Error is propagated if runtime or rethrown as runtime exception.
  
  @param config transaction config (ignored in case of ongoing transaction)
  @param action action to execute within transaction (new or ongoing)
  @param <T>    return value type
  @return value produced by action