@Transactional、Synchronization源码翻译

package javax.transaction;

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

/**
 * 目的:事务注解@Transactional
 * 
 * <p>@Transactional注解使CDI管理bean,类定义符合Java EE的规范,同时在
 * 类和方法级别上注解。注解的方法覆盖该注解的类。参考EJB规范。
 * 
 * <p>该支持提供一个通道,使CDI拦截器执行必要的暂停、恢复等等。事务拦截器仅对业务方法
 * 调用进行交互,而不是在生命周期事件上。在一个未指定的事务上下文中调用生命周期方法。
 * 
 * <p>带有@Transactional和事务的bean或方法中,尝试调用UserTransaction接口中
 * 的任何方法。TxType除了NOT_SUPPORTED或NEVER外,将抛出IllegalStateException
 * 异常。允许在生命周期事件中使用UserTransaction接口的方法。不管任何@Transactional注解,
 * TransactionSynchronizationRegistry都将会被使用。
 * 
 * <p>事务拦截器的优先权Interceptor.Priority.PLATFORM_BEFORE+200。更多
 * 细节参看拦截器规范。
 * 
 * <p>在事务上下文中,注解的元素TxType指示是否要执行bean方法。默认是TxType.REQUIRED。
 * 
 * <p>默认情况下,检查异常和运行时异常的实例及其子类,不会导致事务拦截器标记的事务回滚。
 * 但是可以在异常中指定回滚。
 * 
 * <p>rollbackOn元素使拦截器标记的事务进行回滚。
 * 
 * <p>当一个类指定是这两种元素,指定的行为也适用于该类的子类。如果两个元素使用,
 * 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 {
        /**
         *  <p>若果在事务上下之外被调用,则拦截器必须开始一个新的JTA事务。从而在事务上下文中,
         *  托管bean的方法继续被执行,事务必须完成。
         *  
         *  <p>若果在事务上下之内被调用,托管bean的方法被执行。
         *  
         *  <p>总之,事务上下文中,必须有个JTA事务。
         */
        REQUIRED,//执行方法时,必须有个事务,没有事务则创建

        /**
         *  <p>若果在事务上下之外被调用,则拦截器必须开始一个新的JTA事务。从而在事务上下文中,
         *  托管bean的方法继续被执行,事务必须完成。
         *  
         *  <p>若果在事务上下之内被调用,当前事务上下文必须暂停,创建一个新的JTA事务,托管
         *  bean的方法被执行完成。之前暂停的事务,重新恢复。
         */
        REQUIRES_NEW,//执行方法时,即使有事务,也要创建新的事务

        /**
         *  <p>若果在事务上下之外被调用,TransactionalException异常嵌套一个
         *  TransactionRequiredException异常被抛出。
         *  
         *  <p>若果在事务上下之内被调用,托管bean的方法被执行。
         */
        MANDATORY,//事务上下外不能执行该方法,否则抛出异常

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

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

        /**
         *  <p>若果在事务上下之外被调用,托管bean的方法也会被执行。
         *  <p>若果在事务上下之内被调用,TransactionalException异常嵌套一个
         *  TransactionRequiredException异常被抛出。
         */
        NEVER //事务上下文不执行该方法,否则抛出异常
    }

    /**
     * rollbackOn设置到指定的异常中,若是拦截器标记的事务出现该异常时,事务将回滚。
     * 相反,dontRollbackOn设置将不会出现回滚。
     * 当一个类有这些元素中的任何一个,指定的行为也适用于该类的子类。如果两个元素都有,
     * dontRollbackOn优先。
     * @return Class[] of Exceptions
     */
    @Nonbinding
    public Class[] rollbackOn() default {};

    @Nonbinding
    public Class[] dontRollbackOn() default {};

}

package javax.transaction;
/**
 * 目的:事务同步,即:事务完成前后调用的方法
 * 
 * <p>事务管理器支持同步机制,在事务完成的前/后,调用该接口中的方法。使用
 * 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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值