2017-01-30 88 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