java - 本地方法调用中的 EJB 事务

标签 java jakarta-ee transactions ejb

在以下设置中,方法 B 是否在(新)事务中运行?

一个 EJB,有两个方法,方法 A 和方法 B

public class MyEJB implements SessionBean
    public void methodA() {
       doImportantStuff();
       methodB();
       doMoreImportantStuff();
    }

    public void methodB() {
       doDatabaseThing();
    }
}

EJB 是容器管理的,方法B 在requires_new 事务中,方法A 在required 事务中。因此:

<container-transaction id="MethodTransaction_1178709616940">
  <method id="MethodElement_1178709616955">
    <ejb-name>MyName</ejb-name>
    <method-name>*</method-name>
  <trans-attribute>Required</trans-attribute>
  </method>
  <method id="MethodElement_1178709616971">
    <ejb-name>MyName</ejb-name>
    <method-name>methodB</method-name>
  </method>
  <trans-attribute>RequiresNew</trans-attribute>
</container-transaction>

现在让另一个 EJB 通过 EJB 方法调用来调用 methodA。 methodA 现在在事务中运行。从 methodA 对 methodB 的后续调用是在同一个事务中运行,还是在新事务中运行? (注意,这是这里的实际代码。没有对方法 B 的显式 ejb 调用)

最佳答案

methodB() 的调用是对方法的普通调用,不会被 EJB 容器拦截;在运行时,EJB 容器将注入(inject) proxy而不是类的实例,这是它在调用方法之前拦截调用并设置环境的方式。如果您使用this,您将直接调用方法,而不是通过代理。因此,无论 ejb-jar.xml 中为通过 EJB 接口(interface)进行的调用定义了什么,这两种方法都将使用相同的事务。

关于java - 本地方法调用中的 EJB 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/427452/

相关文章:

java - 类加载器(和 Guice)表现得很奇怪

java - 总计未加起来

java - 延迟加载时 PrimeFaces DataTable 中的奇怪行为(内部视频;))

database - 如何处理数据库中用户的身份验证/授权?

php - 将数据从一个 MySQL 表传输到另一个

sql - 当连接关闭时,未提交的事务会发生什么?

Java-通过在读取文本文件时覆盖来从文本文件中删除行

通过 JDBC 连接到数据库时出现 java SQLException

java - 在我的应用程序中将外部网页显示到网页中

subsonic - SubSonic 的 SimpleRepository 可以参与两种不同对象类型的事务吗?