我正在阅读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(){
...
}
}
答案 0 :(得分:8)
是的,CONTAINER
和REQUIRED
是默认设置。
您提供的报价似乎来自The Java EE 5 Tutorial。我同意这句话有点令人困惑。这是可能有帮助的重写。
容器管理的事务不需要所有方法都使用 默认的REQUIRED事务语义。在开发豆子时,你 可以通过设置事务来更改事务语义 属性。例如,您可以指定应该运行方法 没有使用NEVER事务属性的任何事务,
答案 1 :(得分:1)
答案 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