jBPM5:Task life cycleにおけるReadyとReserved

渡邊です。こんにちは。

jBPM5の研究をしています。
備忘録を兼ねて、Task life cycleにおけるReadyとReservedに関連して、はまったことを記します。

Task life cycleに関してはユーザガイドの「13.2.1. Task life cycle」に図解があります。
非常に波乱万丈な生涯になっておりますね。

Ready
タスクが生成された後、通常はCreatedからReadyになります。

Reserved
あるユーザが当該タスクを要求した時、(Readyから)Reservedになります。
特定の一人にアサインされる見込みであるタスクは、そのタスクが作成される時に自動的にその人にアサインされ、(Createdから)Reservedになります。

はまったこと
上記の赤字部分を見落としていた為にはまりました。
あるユーザが実行可能なタスクを抽出しようとして、次のようなコードを書きました。

public List<TaskSummary> getTaskSummary(TaskService taskService, String actorId, String... groupIds) {
    List<TaskSummary> allTasks = taskService.getTasksAssignedAsPotentialOwner(actorId, Arrays.asList(groupIds), "en-UK");
    List<TaskSummary> out = new ArrayList<TaskSummary>();
    for (TaskSummary each : allTasks) {
        if (Status.Ready == each.getStatus()) out.add(each);
    }
    return out;
}

上記コードでは、一部のタスクが抽出できなかった訳です。
もちろん一部のタスクというのは、一人のユーザにアサインしていたタスクでした。
具体的には、Actorsプロパティにユーザ一人を設定したタスクです。#{userId}のようにプロセス内変数(a variable in the process)を設定した場合も含みます。
揚げ足取りかもしれませんが、プロセス内変数を設定した場合、アサインされる人は不特定多数になるので、妙な現象といえます。

赤字部分の仕様は、どのような利点があるのでしょうか。何らかの制約に基づいたものでしょうか。
できればシンプルな仕様にして欲しいです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です