Jakarta ee EJB事务中的默认属性

Jakarta ee EJB事务中的默认属性,jakarta-ee,transactions,ejb,Jakarta Ee,Transactions,Ejb,我正在阅读,我想问几个问题,以确保我已经很好地理解了EJB事务 1) 文档说明defaltTransactionManagement值为CONTAINER,默认的TransactionAttribute值为REQUIRED:如果是,以下(会话)是否正确Bean使用容器托管事务和属性REQUIRED执行其所有方法 @Stateless public class MyBean{ public void methodA(){ ... } public void methodB(){ ... }

我正在阅读,我想问几个问题,以确保我已经很好地理解了EJB事务

1) 文档说明defalt
TransactionManagement
值为
CONTAINER
,默认的
TransactionAttribute
值为
REQUIRED
:如果是,以下(会话)是否正确Bean使用
容器
托管事务和属性
REQUIRED
执行其所有方法

@Stateless
public class MyBean{

public void methodA(){
...
}

public void methodB(){
...
}

}
2) 文档状态:
容器管理的事务不要求所有方法都与事务关联。在开发bean时,可以设置事务属性来指定bean的哪些方法与事务关联。

但是,如果我省略了
事务属性类型
,它是否会自动设置为
必需的
?下面Bean中的
方法b
是否与事务无关

@Stateless
@TransactionManagement(CONTAINER)
public class MyBean{

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

public void methodB(){
...
}

}
  • 默认情况下,方法需要事务设置。因此methodB()是必需的
  • 是,
    容器
    必需
    是默认值

  • 你所说的话似乎来自于。我同意那个句子的措辞有些混乱。这里有一个可能的重写可能会有所帮助

  • 容器管理的事务不要求所有方法都使用 默认必需的事务语义。当开发一个bean时,您需要 可以通过设置事务来更改事务语义 属性。例如,您可以指定一个方法应该运行 通过使用NEVER transaction属性没有任何事务

    1-是的

    2-methodB()具有REQUIRED属性,因为它是默认属性,但您可以使用任何其他选项(从不、REQUIRED\u NEW、SUPPORTED…等)覆盖此默认属性

    但是,容器仍然可以控制在发生系统异常时回滚事务,但是您仍然可以通过调用setRollbackOnly方法回滚事务

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


    因此,如果我的类具有@stateless,则无需添加@TransactionManagement,因为它是默认设置的。是吗?是的。一旦您使用(@Statless或@Stateful)将类定义为EJB,其任何方法中所需的任何事务都将由容器管理,除非您更改它。