【发布时间】:2011-10-15 08:13:52
【问题描述】:
是否有等效于 Spring 的 @Transactional 的 EJB 或 JPA 注释?
【问题讨论】:
是否有等效于 Spring 的 @Transactional 的 EJB 或 JPA 注释?
【问题讨论】:
参见 javadoc。
http://docs.oracle.com/javaee/7/api/javax/transaction/Transactional.html
即段落: 有关在 EJB 中使用 @Transactional 的限制,请参阅 EJB 规范。
我在 EJB 3.2 中没有找到任何关于此支持条件的参考。
http://www.oracle.com/technetwork/java/javaee/tech/index-jsp-142185.html
但是,我在 weblogic 12.1.2 EJB 3.1 中 - @Transactional 属性适用于您使用 CDI @Inject 注释注入基类的 @Stateless @Local ejb。
在任何情况下,我都不会对 EJB 使用 @Transactional 注释,即使您的所有 EJB 都是本地的并且您使用 @Inject 而不是 @EJB 注入它们。 我会继续将 @TransactionAttribute 与 EJB 一起使用。
【讨论】:
等效的 EJB3 属性是 javax.ejb.TransactionAttribute。
就像 Spring 的 @Transactional 注释一样,您可以通过将 TransactionAttributeType 传递给 TransactionAttribute 注释来控制事务“传播”,例如:
@TransactionAttribute(NOT_SUPPORTED)
@Stateful
public class TransactionBean implements Transaction {
...
@TransactionAttribute(REQUIRES_NEW)
public void firstMethod() {...}
@TransactionAttribute(REQUIRED)
public void secondMethod() {...}
public void thirdMethod() {...}
public void fourthMethod() {...}
}
Part IV of the Java EE 5 Tutorial 中描述了容器管理的事务。
【讨论】: