Monolith process to micro service (HELP)

testProcess4.bpmn (31.3 KB)

public class SmartShipGoodService extends PublishSubscribeAdapter {

    private static Integer count = 0;

    public void execute(final ActivityExecution context) throws Exception {

        addMessageSubscription(context, "Message_shipping");

        System.out.println("(back-end | ShipGoodAdapter) call (Supplier) micro service n° "+context.getVariable("loopCounter"));
    }
}

public class PublishSubscribeAdapter extends AbstractBpmnActivityBehavior {
    
  public void signal(ActivityExecution execution, String signalName, Object signalData) throws Exception {
    leave(execution);
  }
  
  protected void addMessageSubscription(final ActivityExecution context, String eventName) {
    ExecutionEntity executionEntity = (ExecutionEntity)context;
    EventSubscriptionEntity eventSubscriptionEntity = new EventSubscriptionEntity(executionEntity, EventType.MESSAGE);
    eventSubscriptionEntity.setEventName(eventName);
    eventSubscriptionEntity.setActivity(executionEntity.getActivity());
    eventSubscriptionEntity.insert();
  }

}

@Test
  @Deployment(resources = {"testProcess4.bpmn"})
  public void shouldExecuteProcess4() {
    ProcessInstance processInstance = runtimeService().startProcessInstanceByKey("testProcess4");

    List<Execution> messagesShipping = getExecutions(processInstance); // cardinality is 5 for the subprocess
    for (int i = 0; i < messagesShipping.size(); i++) {
      Map<String, Object> variables = new HashMap<String, Object>();
      if (i == 3) { // set i == 30 to avoid sub process signal and arrive to the global compensation
        System.out.println("-------------------");
        System.out.println("(back-end) send step 2 ship good compensation !!!!");
        System.out.println("-------------------");
        variables.put("success", false);
      } else {
        variables.put("success", true);
      }
      // compensate received message added programmatically be SmartShipGoodService
      // some message sending can failed due to sub process signal launch and the compensation already append
      runtimeService().messageEventReceived("Message_shipping", messagesShipping.get(i).getId(), variables);
    }
  }

  private List<Execution> getExecutions(ProcessInstance processInstance) {
    return executionQuery().processInstanceId(processInstance.getId()).messageEventSubscriptionName("Message_shipping").list();
  }