2017-01-30 9 views
4

データインポートタスク中、いくつかの「一時停止」状態または一時停止状態で複数のcamundaプロセスインスタンスを開始する必要があります。プロセスにはいくつかのタイマーがあり、そのタイマーの値は過去に存在する可能性があります。このようなプロセスを正常に開始するとすぐにいくつかのタスクの実行が開始されますが、タスクが何らかのデータを使用しているため(まだインポートされていないため)何らかの理由でこの実行を延期したいとします。 だから、私はそのような振る舞いをしたい:サスペンド状態でcamundaプロセスを開始する

1)何らかの方法でカムンダエンジン、ジョブエグゼキュータ、またはプロセス定義を一時停止する。

2)必要なすべてのデータをインポートし、同じ瞬間に

3必要なすべてのプロセスを起動するには)それは以前に開始されたプロセスを実行し、実行できるように、camundaの一時停止を解除します。

は、私は、次の解決方法を試してみた:

1)は、世界的にコックピットからのプロセス定義を一時停止します。しかし、私がプロセスを開始すると、supspendedプロセス定義に関するexceptinがスローされます。 Iは、次のコードを使用してプロセスを開始する:同じコードで

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はジョブエグゼキュータを開始/停止するMBeanを提供します。 – thorben

関連する問題