2017-01-30 89 views
4

在数据导入任务期间,我需要在某些“已暂停”或挂起状态下启动多个camunda进程实例。该过程有一些定时器,并且定时器的值可以在过去。因此,如果我正常启动这样的进程,它会立即开始执行一些任务,但我想以某种方式推迟执行(因为任务正在使用一些尚未导入的数据)。 所以,我想要这样的行为:在暂停状态下启动camunda进程

1)以某种方式暂停Camunda引擎,或作业执行程序或过程定义。

2)输入所需的所有数据,并在同一时刻启动所需的所有流程

3)取消暂停camunda,让它运行和执行先前启动的进程。

我尝试了以下解决方案:

1)全球暂停从驾驶舱流程定义。但是当我开始这个过程时,它会抛出除了过程定义之外的情况。 我启动过程用下面的代码:

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

2)开始的过程以相同的码,并在TX暂停过程实例的相同 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