EJB事务中的缺省属性

时间:2013-12-31 16:13:05

标签: java-ee transactions ejb

我正在阅读java ee docs,我想问几个问题,以确保我已经清楚了解EJB-Transactions的情况。

1)文档声明defaalt TransactionManagement值为CONTAINER,默认TransactionAttribute值为REQUIRED:如果是,我是否正确以下( Session)Bean使用CONTAINER托管交易和属性REQUIRED

执行其所有方法
@Stateless
public class MyBean{

public void methodA(){
...
}

public void methodB(){
...
}

}

2)文档说明:Container-managed transactions do not require all methods to be associated with transactions. When developing a bean, you can set the transaction attributes to specify which of the bean’s methods are associated with transactions.

如果我省略TransactionAttributeType,是否会自动设为REQUIRED?以下Bean中的methodB是否与事务无关?

@Stateless
@TransactionManagement(CONTAINER)
public class MyBean{

@TransactionAttribute(MANDATORY)
public void methodA(){
...
}

public void methodB(){
...
}

}

3 个答案:

答案 0 :(得分:8)

  1. 是的,CONTAINERREQUIRED是默认设置。

  2. 您提供的报价似乎来自The Java EE 5 Tutorial。我同意这句话有点令人困惑。这是可能有帮助的重写。

  3.   

    容器管理的事务不需要所有方法都使用   默认的REQUIRED事务语义。在开发豆子时,你   可以通过设置事务来更改事务语义   属性。例如,您可以指定应该运行方法   没有使用NEVER事务属性的任何事务,

答案 1 :(得分:1)

  1. 默认情况下,方法的事务设置为REQUIRED。因此,methodB()具有REQUIRED

答案 2 :(得分:0)

1-是。

2- methodB()具有REQUIRED属性,因为它是默认属性,但是您可以使用任何其他选项(例如,NEVER,REQUIRED_NEW,SUPPORTED ...等)覆盖此默认属性。

但是,在系统异常的情况下,容器仍然可以控制事务的回滚,但是您仍然可以通过调用setRollbackOnly方法来回滚事务。

  

有两种方法可以回滚容器管理的事务。首先,如果引发系统异常,则容器将自动回滚事务。其次,通过调用EJBContext接口的setRollbackOnly方法,bean方法指示容器回滚事务。如果Bean引发应用程序异常,则回滚不是自动的,但可以通过调用setRollbackOnly来启动。

https://docs.oracle.com/cd/E19798-01/821-1841/bnciv/index.html