在 JSF 托管 bean 中调用多个 EJB 方法,每个 运行 是在同一个事务中还是在单独的事务中?

Calling multiple EJB methods in JSF managed bean, do each run in same or separate transaction?

我有以下托管 bean:

@ManagedBean
@ViewScoped
public class View {
  @EJB
  private Bar bar

  public void foo() {
     bar.do();
     bar.do();
     bar.do();
  }
}

这会导致 3 笔交易(每个 bar.do() 调用一次)还是会导致 1 笔交易 (foo())?

您将有 3 个单独的事务,因为 EJB 容器在 bean 方法开始时启动事务并在方法完成时结束它(这是自动完成的 Container Managed Transactions, with Bean Managed Transactions 您手动执行此操作)。

如果您只想使用 1 个事务和多个 EJB 方法调用,那么 1.,使用会话外观设计模式。使用 CMT(容器管理的事务)创建一个 facae bean 以在它自己的事务中调用其他 bean。 2.、使用BMT(Bean Managed Transaction)