2017-01-30 15 views
4

Во время задачи импорта данных мне нужно запустить несколько экземпляров процесса camunda в некотором «приостановленном» или приостановленном состоянии. Процесс имеет несколько таймеров, и значения этих таймеров могут быть в прошлом. Поэтому, если я запускаю такой процесс нормально, он немедленно начнет выполнение некоторых задач, но я хочу как-то отложить это выполнение (потому что задачи используют некоторые данные, которые еще не импортированы). Итак, я хочу такого поведения:Начать процесс camunda во взвешенном состоянии

1) каким-то образом приостановить двигатель камунды, или исполнитель задания, или определение процесса.

2) импортировать все необходимые данные, и в то же время начать все необходимые процессы

3) Возобновить на camunda, чтобы позволить ей работать и выполнять ранее созданные процессы.

Я попытался следующие решения:

1) глобально приостановить определение процесса из кабины. Но когда я запускаю этот процесс, он выдает исключение, касающееся определения расширенного процесса. я начать процесс с помощью следующего кода:

runtimeService.createProcessInstanceByKey("process-key") 
      .businessKey("some-business-key") 
      .setVariables(vars) 
      .startBeforeActivity("xxx") 
      .execute(); 

2) начать процесс с тем же кодом, и в том же ОМ приостановить экземпляр процесса runtimeService.suspendProcessInstanceById (processInstance.getProcessInstanceId()); Но я получаю некоторые исключения и инциденты.

3) Отключить исполнитель заданий camunda во всем мире, в файле конфигурации. Работает нормально, но не очень удобно изменять конфигурацию и перезапускать сервер каждый раз.

Есть ли лучшие решения?

+0

Вы используете общий или встроенный двигатель? Если общий, какой сервер приложений? – thorben

+0

Camunda установлен как подмодуль wildfly10. – NullPointer

ответ

2

Найден способ управления исполнителем задания во время выполнения.

JobExecutor jobExecutor = ((ProcessEngineConfigurationImpl) processEngine.getProcessEngineConfiguration()).getJobExecutor(); 
    if (jobExecutor.isActive()) { 
     jobExecutor.shutdown(); 
    } else { 
     jobExecutor.start(); 
    } 
+0

Я думаю, что это хорошее решение. В зависимости от использования вам может потребоваться синхронизация доступа к этому коду. На серверах, отличных от JBoss/Wildfly, Camunda предлагает MBeans для запуска/остановки работы исполнителей. – thorben