8.2.2. タスクインスタンスとグラフ実行

タスクインスタンスは、アクターのタスクリストにある項目です。Signalling タスクインスタンスはタスクインスタンスの1つで、完了時にトークンへシグナルを送信しプロセス実行を継続します。また、別のタスクインスタンスに、Blocking タスクインスタンスというのがあり、 関係のあるトークン(=実行パス) はこのタスクインスタンス終了前に、task-nodeを退場することはできません。デフォルトでは、タスクインスタンスはsignallingおよび non-blockingとなっています。
複数のタスクインスタンスが1つのtask-nodeに関連付けられている場合、プロセス開発者は、タスクインスタンスが完了することでプロセスの継続にどのような影響与えるか指定することができます。task-nodesignal-propertyにこれらの値を渡します。
last
デフォルトです。最後のタスクインスタンスが終了しても実行を続けます。 このノードに入った際にタスクが作成されない場合、実行は継続されます。
last-wait
最後のタスクインスタンスが終了しても実行を続けます。 このノードに入った際にタスクが作成されない場合、タスクノードにてタスクが作成されるまで実行を待機します。
first
最初のタスクインスタンスが終了しても実行を続けます。 このノードに入った際にタスクが作成されない場合、実行は継続されます。
first-wait
最初のタスクインスタンスが終了しても実行を続けます。 このノードに入った際にタスクが作成されない場合、タスクノードにてタスクが作成されるまで実行を待機します。
unsynchronized
この場合タスクの作成あるいは、未完了に拘らず常に実行は継続されます。
never
この場合、タスクの作成、あるいは未完了に拘らず、実行は継続されません。
タスクインスタンス作成はランタイムの計算に基づいている場合があります。その場合、task-nodenode-enterイベント上の ActionHandler へ追加し、create-tasks="false"に設定します。 以下に例を示します。
public class CreateTasks implements ActionHandler {
  public void execute(ExecutionContext executionContext) throws Exception {
    Token token = executionContext.getToken();
    TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
      
    TaskNode taskNode = (TaskNode) executionContext.getNode();
    Task changeNappy = taskNode.getTask("change nappy");

    // now, 2 task instances are created for the same task.
    tmi.createTaskInstance(changeNappy, token);
    tmi.createTaskInstance(changeNappy, token);
  }
}
ここでは、作成されるタスクは、 task-nodeに指定されます。 それらは、 process-definitionでも指定ができ TaskMgmtDefinitionからも取得できます (TaskMgmtDefinition は、タスク管理情報を追加することで、プロセス定義をを継承します)。
TaskInstance.end() を使い、タスクインスタンスの完了をマークします。任意で、endメソッドに遷移を指定できます。 タスクインスタンス完了が実行プロセスの継続を引き起こす場合、 指定された遷移を通るため、そのtask-node から退場します。