docs: public static void performOperation(Object synchronizationKey,
              Object target, Method method, Object[] args) throws Throwable {
          CompensatingTransactionHolderSupport transactionResourceHolder = (CompensatingTransactionHolderSupport) TransactionSynchronizationManager
                  .getResource(synchronizationKey);
          if (transactionResourceHolder != null) {
  
              CompensatingTransactionOperationManager transactionOperationManager = transactionResourceHolder
                      .getTransactionOperationManager();
              transactionOperationManager.performOperation(
                      transactionResourceHolder.getTransactedResource(), method
                              .getName(), args);
          } else {
              // Perform the target operation
              try {
                  method.invoke(target, args);
              } catch (InvocationTargetException e) {
                  throw e.getTargetException();
              }
          }
      }