かとじゅんの技術日誌

技術の話をするところ

タスククラスに複数のタスクグループを定義してみる

お次はタスクグループをタスククラス内に複数定義する方法です.
以下の例ではタスククラス内に二つのタスクグループを作っています.タスクグループを指定するにはdoから始まるタスクメソッドにTaskGroupアノテーションを使ってグループ名を記述します.タスクグループが開始する前に呼ばれるstartメソッドをgroupAであればstartGroupAという名前で記述します.タスクグループが終了した後に呼ばれるendメソッドをgroupAであればendGroupAという名前で定義します.startGroupAでは,グループが開始された時最初に実行するタスクメソッドを記述してください.タスクグループの定義はこれで完了.
後は,タスクの開始メソッド,startメソッドでNextTaskアノテーションを使い,最初に実行するタスクグループ名を指定します.そうするとタスク開始時に期待どおりに指定したタスクグループのタスクから実行されます.タスクグループAが終了したらタスクグループBを実行したい場合は,タスクグループの終了メソッド,endGroupAメソッドにNextTaskアノテーションで次に実行すべきタスクグループを指定してください.

start,end系のメソッドは戻り値で次に遷移するタスクグループ名ないしタスク名が指定できない仕様になっています.次のバージョンは戻り値で指定できるようにする予定です.

@Task
@NonDelayTrigger
public class TaskGroupTask {

	private Logger log = Logger.getLogger(TaskGroupTask.class);

	@NextTask("groupA")
	public void start() {
		log.info("start");
	}

	//----- タスクグループA -----

	@NextTask("taskA")
	public void startGroupA() {
		log.info("startGroupA");
	}

	@TaskGroup("groupA")
	@NextTask("taskB")
	public void doTaskA() {
		log.info("doTaskA");
	}

	@TaskGroup("groupA")
	public void doTaskB() {
		log.info("doTaskB");
	}

	@NextTask("groupB")
	public void endGroupA() {
		log.info("endGroupA");
	}


	//----- タスクグループB -----

	@NextTask("taskC")
	public void startGroupB() {
		log.info("startGroupB");
	}

	@TaskGroup("groupB")
	@NextTask("taskD")
	public void doTaskC() {
		log.info("doTaskC");
	}

	@TaskGroup("groupB")
	public void doTaskD() {
		log.info("doTaskD");
	}

	public void endGroupB() {
		log.info("endGroupB");
	}

	public void end() {
		log.info("end");
	}

}