渡邊です。こんにちは。
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)を設定した場合も含みます。
揚げ足取りかもしれませんが、プロセス内変数を設定した場合、アサインされる人は不特定多数になるので、妙な現象といえます。
赤字部分の仕様は、どのような利点があるのでしょうか。何らかの制約に基づいたものでしょうか。
できればシンプルな仕様にして欲しいです。