docs: protected void initJobExecutor() {
      if (jobExecutor == null) {
        jobExecutor = new DefaultJobExecutor();
      }
  
      jobHandlers = new HashMap<String, JobHandler>();
      TimerExecuteNestedActivityJobHandler timerExecuteNestedActivityJobHandler = new TimerExecuteNestedActivityJobHandler();
      jobHandlers.put(timerExecuteNestedActivityJobHandler.getType(), timerExecuteNestedActivityJobHandler);
  
      TimerCatchIntermediateEventJobHandler timerCatchIntermediateEvent = new TimerCatchIntermediateEventJobHandler();
      jobHandlers.put(timerCatchIntermediateEvent.getType(), timerCatchIntermediateEvent);
  
      TimerStartEventJobHandler timerStartEvent = new TimerStartEventJobHandler();
      jobHandlers.put(timerStartEvent.getType(), timerStartEvent);
  
      TimerStartEventSubprocessJobHandler timerStartEventSubprocess = new TimerStartEventSubprocessJobHandler();
      jobHandlers.put(timerStartEventSubprocess.getType(), timerStartEventSubprocess);
  
      AsyncContinuationJobHandler asyncContinuationJobHandler = new AsyncContinuationJobHandler();
      jobHandlers.put(asyncContinuationJobHandler.getType(), asyncContinuationJobHandler);
  
      ProcessEventJobHandler processEventJobHandler = new ProcessEventJobHandler();
      jobHandlers.put(processEventJobHandler.getType(), processEventJobHandler);
  
      TimerSuspendProcessDefinitionHandler suspendProcessDefinitionHandler = new TimerSuspendProcessDefinitionHandler();
      jobHandlers.put(suspendProcessDefinitionHandler.getType(), suspendProcessDefinitionHandler);
  
      TimerActivateProcessDefinitionHandler activateProcessDefinitionHandler = new TimerActivateProcessDefinitionHandler();
      jobHandlers.put(activateProcessDefinitionHandler.getType(), activateProcessDefinitionHandler);
  
      TimerSuspendJobDefinitionHandler suspendJobDefinitionHandler = new TimerSuspendJobDefinitionHandler();
      jobHandlers.put(suspendJobDefinitionHandler.getType(), suspendJobDefinitionHandler);
  
      TimerActivateJobDefinitionHandler activateJobDefinitionHandler = new TimerActivateJobDefinitionHandler();
      jobHandlers.put(activateJobDefinitionHandler.getType(), activateJobDefinitionHandler);
  
      BatchSeedJobHandler batchSeedJobHandler = new BatchSeedJobHandler();
      jobHandlers.put(batchSeedJobHandler.getType(), batchSeedJobHandler);
  
      BatchMonitorJobHandler batchMonitorJobHandler = new BatchMonitorJobHandler();
      jobHandlers.put(batchMonitorJobHandler.getType(), batchMonitorJobHandler);
  
      HistoryCleanupJobHandler historyCleanupJobHandler = new HistoryCleanupJobHandler();
      jobHandlers.put(historyCleanupJobHandler.getType(), historyCleanupJobHandler);
  
      for (JobHandler batchHandler : batchHandlers.values()) {
        jobHandlers.put(batchHandler.getType(), batchHandler);
      }
  
      // if we have custom job handlers, register them
      if (getCustomJobHandlers() != null) {
        for (JobHandler customJobHandler : getCustomJobHandlers()) {
          jobHandlers.put(customJobHandler.getType(), customJobHandler);
        }
      }
  
      jobExecutor.setAutoActivate(jobExecutorActivate);
  
      if (jobExecutor.getRejectedJobsHandler() == null) {
        if (customRejectedJobsHandler != null) {
          jobExecutor.setRejectedJobsHandler(customRejectedJobsHandler);
        } else {
          jobExecutor.setRejectedJobsHandler(new NotifyAcquisitionRejectedJobsHandler());
        }
      }
  
    }