package com.yiqiniu.easytrans.protocol;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 *	define the execute order of methods
 */
@Target({METHOD})
@Retention(RUNTIME)
public @interface ExecuteOrder {
	
	/**
	 * do not execute method after one of the methods in the list called
	 * typical used in TCC, if cancel-method executed,then latter try-method should not be execute
	 */
	String[] doNotExecuteAfter();
	
	/**
	 * if the one of the methods executed,then return directly without execute business implement<br/>
	 * typical used in CompensableBusiness, if doCompensableBusiness did not work,<br>
	 * then call doCompensation should not execute business codes,just return directly
	 */
	String[] ifNotExecutedReturnDirectly();
	
	/**
	 * whether is the synchronizer method for business<br/>
	 * For example,TCC's Try method is synchronizer method 
	 */
	boolean isSynchronousMethod() default false;
}
