Camunda流程调用梳理

1、userTask调用逻辑

  • 接口调用:
  1. 从接口(resources)进入
  2. 实现类(xxxImpl)
  3. Executor.execute(new xxxCmd())
  4. xxxCmd中执行execute()方法
  • 内部创建调用:(BpmnParser是关键调用类)
  1. xxxCmd 执行逻辑调用
  2. 获取TaskManager(可选):TaskManager taskManager = commandContext.getTaskManager();
  3. 获取TaskEntity:通过taskManager.findTaskById(id)
  4. taskEntity.update()/delete()....
  5. fireEvent( eventName ) :最后操作都是通过fireEvent获取到对应的Listener通过观察者模式进行调用。
  • fireEvent调用逻辑:
  1. 获取ExecutionEntity / (CoreExecution):Context .getCommandContext() .getExecutionManager() .findExecutionById(executionId);
  2. 包装对应taskListener+实例(delegateTask)+根据实例的executionId获取的execution,得到TaskListenerInvocation:new TaskListenerInvocation(taskListener, delegateTask, execution)                                  注:此处listener会在后续操作中执行对应的notify()方法
  3. xxxInvocation.handleInvocation(TaskListenerInvocation)真正执行对应操作:Context.getProcessEngineConfiguration() .getDelegateInterceptor() .handleInvocation(listenerInvocation);
  4. DefaultDelegateInterceptor.handleInvocation(listenerInvocation):通过Interceptor来进行底层操作
  5. listenerInvocation.proceed() 
  6. 对应执行器(xxxInvocation)执行:xxxInvocation.invoke()
  7. behaviourInstance.execute(execution)
  8. 对应listener执行notify()

你可能感兴趣的:(Camunda)