当前位置:   article > 正文

@Transactional、Synchronization源码翻译_@transactional synchorization

@transactional synchorization

  1. package javax.transaction;
  2. import javax.enterprise.util.Nonbinding;
  3. import javax.interceptor.InterceptorBinding;
  4. import java.lang.annotation.*;
  5. /**
  6. * 目的:事务注解@Transactional
  7. *
  8. * <p>@Transactional注解使CDI管理bean,类定义符合Java EE的规范,同时在
  9. * 类和方法级别上注解。注解的方法覆盖该注解的类。参考EJB规范。
  10. *
  11. * <p>该支持提供一个通道,使CDI拦截器执行必要的暂停、恢复等等。事务拦截器仅对业务方法
  12. * 调用进行交互,而不是在生命周期事件上。在一个未指定的事务上下文中调用生命周期方法。
  13. *
  14. * <p>带有@Transactional和事务的bean或方法中,尝试调用UserTransaction接口中
  15. * 的任何方法。TxType除了NOT_SUPPORTED或NEVER外,将抛出IllegalStateException
  16. * 异常。允许在生命周期事件中使用UserTransaction接口的方法。不管任何@Transactional注解,
  17. * TransactionSynchronizationRegistry都将会被使用。
  18. *
  19. * <p>事务拦截器的优先权Interceptor.Priority.PLATFORM_BEFORE+200。更多
  20. * 细节参看拦截器规范。
  21. *
  22. * <p>在事务上下文中,注解的元素TxType指示是否要执行bean方法。默认是TxType.REQUIRED。
  23. *
  24. * <p>默认情况下,检查异常和运行时异常的实例及其子类,不会导致事务拦截器标记的事务回滚。
  25. * 但是可以在异常中指定回滚。
  26. *
  27. * <p>rollbackOn元素使拦截器标记的事务进行回滚。
  28. *
  29. * <p>当一个类指定是这两种元素,指定的行为也适用于该类的子类。如果两个元素使用,
  30. * dontRollbackOn优先。
  31. * @author TCM
  32. * @create 2017年10月30日下午1:46:18
  33. * @since JTA1.2
  34. */
  35. @Inherited
  36. @InterceptorBinding
  37. @Target({ElementType.TYPE, ElementType.METHOD})
  38. @Retention(value = RetentionPolicy.RUNTIME)
  39. public @interface Transactional {
  40. /**
  41. * 在事务上下文中,注解的元素TxType指示是否要执行bean方法。默认是TxType.REQUIRED。
  42. */
  43. TxType value() default TxType.REQUIRED;
  44. public enum TxType {
  45. /**
  46. * <p>若果在事务上下之外被调用,则拦截器必须开始一个新的JTA事务。从而在事务上下文中,
  47. * 托管bean的方法继续被执行,事务必须完成。
  48. *
  49. * <p>若果在事务上下之内被调用,托管bean的方法被执行。
  50. *
  51. * <p>总之,事务上下文中,必须有个JTA事务。
  52. */
  53. REQUIRED,//执行方法时,必须有个事务,没有事务则创建
  54. /**
  55. * <p>若果在事务上下之外被调用,则拦截器必须开始一个新的JTA事务。从而在事务上下文中,
  56. * 托管bean的方法继续被执行,事务必须完成。
  57. *
  58. * <p>若果在事务上下之内被调用,当前事务上下文必须暂停,创建一个新的JTA事务,托管
  59. * bean的方法被执行完成。之前暂停的事务,重新恢复。
  60. */
  61. REQUIRES_NEW,//执行方法时,即使有事务,也要创建新的事务
  62. /**
  63. * <p>若果在事务上下之外被调用,TransactionalException异常嵌套一个
  64. * TransactionRequiredException异常被抛出。
  65. *
  66. * <p>若果在事务上下之内被调用,托管bean的方法被执行。
  67. */
  68. MANDATORY,//事务上下外不能执行该方法,否则抛出异常
  69. /**
  70. * <p>若果在事务上下之外被调用,托管bean的方法也会被执行。
  71. *
  72. * <p>若果在事务上下之内被调用,托管bean的方法被执行。
  73. */
  74. SUPPORTS,//事务上下内/外都可以执行该方法
  75. /**
  76. * <p>若果在事务上下之外被调用,托管bean的方法也会被执行。
  77. *
  78. * <p>若果在事务上下之内被调用,当前事务上下文必须暂停,托管bean的方法将在事务
  79. * 上下之外被执行。之前暂停的事务,重新恢复。
  80. */
  81. NOT_SUPPORTED,//事务上下文内不执行该方法
  82. /**
  83. * <p>若果在事务上下之外被调用,托管bean的方法也会被执行。
  84. * <p>若果在事务上下之内被调用,TransactionalException异常嵌套一个
  85. * TransactionRequiredException异常被抛出。
  86. */
  87. NEVER //事务上下文不执行该方法,否则抛出异常
  88. }
  89. /**
  90. * rollbackOn设置到指定的异常中,若是拦截器标记的事务出现该异常时,事务将回滚。
  91. * 相反,dontRollbackOn设置将不会出现回滚。
  92. * 当一个类有这些元素中的任何一个,指定的行为也适用于该类的子类。如果两个元素都有,
  93. * dontRollbackOn优先。
  94. * @return Class[] of Exceptions
  95. */
  96. @Nonbinding
  97. public Class[] rollbackOn() default {};
  98. @Nonbinding
  99. public Class[] dontRollbackOn() default {};
  100. }

  1. package javax.transaction;
  2. /**
  3. * 目的:事务同步,即:事务完成前后调用的方法
  4. *
  5. * <p>事务管理器支持同步机制,在事务完成的前/后,调用该接口中的方法。使用
  6. * javax.transaction.Transaction.registerSynchronization()
  7. * 方法,应用服务器可以为当前目标事务对象的事务注册一个Synchronization对象。
  8. * @author TCM
  9. * @create 2017年10月31日下午2:06:47
  10. */
  11. public interface Synchronization {
  12. //two-phase(两阶段)事务提交之前执行的方法
  13. public void beforeCompletion();
  14. //事务提交或回滚之后执行的方法
  15. public void afterCompletion(int status);
  16. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/620987
推荐阅读
相关标签
  

闽ICP备14008679号