@Transactional、Synchronization源码翻译

package javax.transaction;

import javax.enterprise.util.Nonbinding;
import javax.interceptor.InterceptorBinding;
import java.lang.annotation.*;

/**
 * 目的:事务注解@Transactional
 * 
 * 

@Transactional注解使CDI管理bean,类定义符合Java EE的规范,同时在 * 类和方法级别上注解。注解的方法覆盖该注解的类。参考EJB规范。 * *

该支持提供一个通道,使CDI拦截器执行必要的暂停、恢复等等。事务拦截器仅对业务方法 * 调用进行交互,而不是在生命周期事件上。在一个未指定的事务上下文中调用生命周期方法。 * *

带有@Transactional和事务的bean或方法中,尝试调用UserTransaction接口中 * 的任何方法。TxType除了NOT_SUPPORTED或NEVER外,将抛出IllegalStateException * 异常。允许在生命周期事件中使用UserTransaction接口的方法。不管任何@Transactional注解, * TransactionSynchronizationRegistry都将会被使用。 * *

事务拦截器的优先权Interceptor.Priority.PLATFORM_BEFORE+200。更多 * 细节参看拦截器规范。 * *

在事务上下文中,注解的元素TxType指示是否要执行bean方法。默认是TxType.REQUIRED。 * *

默认情况下,检查异常和运行时异常的实例及其子类,不会导致事务拦截器标记的事务回滚。 * 但是可以在异常中指定回滚。 * *

rollbackOn元素使拦截器标记的事务进行回滚。 * *

当一个类指定是这两种元素,指定的行为也适用于该类的子类。如果两个元素使用, * dontRollbackOn优先。 * @author TCM * @create 2017年10月30日下午1:46:18 * @since JTA1.2 */ @Inherited @InterceptorBinding @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(value = RetentionPolicy.RUNTIME) public @interface Transactional { /** * 在事务上下文中,注解的元素TxType指示是否要执行bean方法。默认是TxType.REQUIRED。 */ TxType value() default TxType.REQUIRED; public enum TxType { /** *

若果在事务上下之外被调用,则拦截器必须开始一个新的JTA事务。从而在事务上下文中, * 托管bean的方法继续被执行,事务必须完成。 * *

若果在事务上下之内被调用,托管bean的方法被执行。 * *

总之,事务上下文中,必须有个JTA事务。 */ REQUIRED,//执行方法时,必须有个事务,没有事务则创建 /** *

若果在事务上下之外被调用,则拦截器必须开始一个新的JTA事务。从而在事务上下文中, * 托管bean的方法继续被执行,事务必须完成。 * *

若果在事务上下之内被调用,当前事务上下文必须暂停,创建一个新的JTA事务,托管 * bean的方法被执行完成。之前暂停的事务,重新恢复。 */ REQUIRES_NEW,//执行方法时,即使有事务,也要创建新的事务 /** *

若果在事务上下之外被调用,TransactionalException异常嵌套一个 * TransactionRequiredException异常被抛出。 * *

若果在事务上下之内被调用,托管bean的方法被执行。 */ MANDATORY,//事务上下外不能执行该方法,否则抛出异常 /** *

若果在事务上下之外被调用,托管bean的方法也会被执行。 * *

若果在事务上下之内被调用,托管bean的方法被执行。 */ SUPPORTS,//事务上下内/外都可以执行该方法 /** *

若果在事务上下之外被调用,托管bean的方法也会被执行。 * *

若果在事务上下之内被调用,当前事务上下文必须暂停,托管bean的方法将在事务 * 上下之外被执行。之前暂停的事务,重新恢复。 */ NOT_SUPPORTED,//事务上下文内不执行该方法 /** *

若果在事务上下之外被调用,托管bean的方法也会被执行。 *

若果在事务上下之内被调用,TransactionalException异常嵌套一个 * TransactionRequiredException异常被抛出。 */ NEVER //事务上下文不执行该方法,否则抛出异常 } /** * rollbackOn设置到指定的异常中,若是拦截器标记的事务出现该异常时,事务将回滚。 * 相反,dontRollbackOn设置将不会出现回滚。 * 当一个类有这些元素中的任何一个,指定的行为也适用于该类的子类。如果两个元素都有, * dontRollbackOn优先。 * @return Class[] of Exceptions */ @Nonbinding public Class[] rollbackOn() default {}; @Nonbinding public Class[] dontRollbackOn() default {}; }


package javax.transaction;
/**
 * 目的:事务同步,即:事务完成前后调用的方法
 * 
 * 

事务管理器支持同步机制,在事务完成的前/后,调用该接口中的方法。使用 * javax.transaction.Transaction.registerSynchronization() * 方法,应用服务器可以为当前目标事务对象的事务注册一个Synchronization对象。 * @author TCM * @create 2017年10月31日下午2:06:47 */ public interface Synchronization { //two-phase(两阶段)事务提交之前执行的方法 public void beforeCompletion(); //事务提交或回滚之后执行的方法 public void afterCompletion(int status); }

你可能感兴趣的:(javaEE)