我阅读了java ee文档,我想问几个问题,以确保我已经很好地理解了EJB-事务是怎么回事。
1) docs声明defaalt TransactionManagement值为CONTAINER,默认TransactionAttribute值为REQUIRED:如果是,下面的(会话) Bean使用CONTAINER托管事务和属性REQUIRED执行其所有方法,对吗?
@Stateless
public class MyBean{
public void methodA(){
...
}
public void methodB(){
...
}
}2) docs状态: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(){
...
}
}发布于 2014-01-01 16:57:30
CONTAINER和REQUIRED是默认的。容器管理事务并不要求所有方法都使用默认的所需事务语义。在开发bean时,可以通过设置事务属性来更改事务语义。例如,可以通过使用“从不事务”属性指定在没有任何事务的情况下运行方法,
发布于 2014-01-01 16:57:12
发布于 2019-01-30 07:55:50
1-是的。
2- methodB()具有必需属性,因为它是默认属性,但是您可以用任何其他选项覆盖这个默认属性,比如(从不,REQUIRED_NEW,支持.等)。
但是,容器仍然有在系统异常情况下回滚事务的控件,但您仍然能够通过调用setRollbackOnly方法回滚事务。
有两种方法可以回滚容器管理的事务。首先,如果抛出系统异常,容器将自动回滚事务。其次,通过调用setRollbackOnly接口的EJBContext方法,bean方法指示容器回滚事务。如果bean抛出应用程序异常,则回滚不是自动的,而是可以通过调用setRollbackOnly来启动。
https://docs.oracle.com/cd/E19798-01/821-1841/bnciv/index.html
https://stackoverflow.com/questions/20860079
复制相似问题