docs: public static void throwCompensationEvent(List<CompensateEventSubscriptionEntity> eventSubscriptions, DelegateExecution execution, boolean async) {
  
      ExecutionEntityManager executionEntityManager = Context.getCommandContext().getExecutionEntityManager();
      
      // first spawn the compensating executions
      for (EventSubscriptionEntity eventSubscription : eventSubscriptions) {
        ExecutionEntity compensatingExecution = null;
        
        // check whether compensating execution is already created (which is the case when compensating an embedded subprocess,
        // where the compensating execution is created when leaving the subprocess and holds snapshot data).
        if (eventSubscription.getConfiguration() != null) {
          compensatingExecution = executionEntityManager.findById(eventSubscription.getConfiguration());
          compensatingExecution.setParent(compensatingExecution.getProcessInstance());
          compensatingExecution.setEventScope(false);
        } else {
          compensatingExecution = executionEntityManager.createChildExecution((ExecutionEntity) execution); 
          eventSubscription.setConfiguration(compensatingExecution.getId());
        }
        
      }
  
      // signal compensation events in reverse order of their 'created' timestamp
      Collections.sort(eventSubscriptions, new Comparator<EventSubscriptionEntity>() {
        public int compare(EventSubscriptionEntity o1, EventSubscriptionEntity o2) {
          return o2.getCreated().compareTo(o1.getCreated());
        }
      });
  
      for (CompensateEventSubscriptionEntity compensateEventSubscriptionEntity : eventSubscriptions) {
        Context.getCommandContext().getEventSubscriptionEntityManager().eventReceived(compensateEventSubscriptionEntity, null, async);
      }
    }