8.3. 割り当て

プロセス定義はタスクノードを含みます。 task-node には0個または1個以上のタスクが含まれます。タスクは、プロセス定義の一部であり静的な記述です。 実行時、タスクはタスクインスタンス作成の結果として発生します。 タスクインスタンスはユーザのタスクリストにおける1エントリに対応しています。
JBPM で、タスク管理のプッシュ (パーソナルタスクリスト) とプル (グループタスクリスト)のモデルの組み合わせが適用できます。プロセスは、タスクへの責務を導出して、ユーザのタスクリストにそれをプッシュすることができます。または、別の方法として、タスクはアクタープールに割り当てることができ、プールにある各アクターがタスクをプルして、それをアクターのタスクリストに置くことができます (詳細は 「パーソナルタスクリスト」「グループタスクリスト」 を参照してください)。

8.3.1. Assignment インターフェース

タスクインスタンスの割り当ては、 AssignmentHandler インターフェース経由で行われます。
public interface AssignmentHandler extends Serializable {
  void assign( Assignable assignable, ExecutionContext executionContext );
}
Assignment Handler実装はタスクインスタンスが作成されると呼び出されます。 その時、タスクインスタンスは1つ以上のアクターに割り当てられます。AssignmentHandler 実装は、 タスクを割り当てるために 割り当て可能なメソッド ( setActorId あるいはsetPooledActors )を呼びだします。 割り当て可能なアイテムは、TaskInstance あるいは SwimlaneInstance (つまり、プロセスロール)です。
public interface Assignable {
  public void setActorId(String actorId);
  public void setPooledActors(String[] pooledActors);
}
TaskInstanceSwimlaneInstance の両方を指定されたユーザか、アクターのプールに割り当てることができます。ユーザに TaskInstanceを割り当てるには、Assignable.setActorId(String actorId) を呼び出します。 TaskInstanceをプールのアクター候補に割り当てるために、 Assignable.setPooledActors(String[] actorIds)を呼び出します。
プロセス定義の各タスクはhandler実装と関連付け、実行時に割り当てを行うことができます。
プロセス内で複数のタスクが同じ人、もしくはアクターのグループに割り当てられると、 スイムレーンの使用を考慮します。 「スイムレーン」 を参照してください。
再利用可能な AssignmentHandler を作成するには、processdefinition.xmlファイルを使いそれぞれ設定します。割り当てハンドラへの設定を追加する方法については、 「委譲」 を参照してください。