code: protected Object doInvocation(TransactionLogger transactionLogger, MethodInvocation invocation,
              TransactionMetadata transactionMetadata, Object currentTransaction) throws Throwable {
          Object result = null;
          try {
              transactionLogger.log("invocation started", transactionLogger);
              result = invocation.proceed();
              transactionLogger.log("invocation ended", transactionLogger);
          } catch (Exception exception) {
              doHandleException(transactionLogger, exception, transactionMetadata, currentTransaction);
          }
          return result;
      }
docs: This method call the wrapped transactional method.
  
  @param transactionLogger   The object that must be used to log transaction progress.
  @param invocation          the {@link MethodInvocation} denoting the transactional method.
  @param transactionMetadata the current transaction metadata.
  @param currentTransaction  the current transaction object if any.
  @return the return value of the transactional method.
  @throws Throwable if an exception occurs during the method invocation.