You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EJB3.1中被无状态Bean调用的方法加@TransactionAttribute(REQUIRED_NEW)是否生效

EJB 3.1 事务属性相关问题解答

问题1:带@TransactionAttribute(REQUIRED)的无状态会话Bean调用标注@TransactionAttribute(REQUIRES_NEW)的方法是否生效

该场景的生效情况取决于调用方式:

  • 通过EJB代理调用其他Bean的目标方法:注解可正常生效。容器会先挂起当前已有的REQUIRED事务,为目标方法创建独立的新事务运行,新事务的提交、回滚逻辑完全独立于被挂起的原有事务,目标方法执行完成后容器会恢复原有事务继续执行。
  • 同一个无状态会话Bean的内部自调用(通过this直接调用方法):注解不会生效。EJB的事务控制逻辑依赖容器生成的代理对象的拦截器实现,内部自调用会绕开代理层,容器无法感知到被调用方法上的事务属性配置,方法会直接沿用当前已有的事务上下文。

注意:EJB规范定义的事务属性枚举值为REQUIRES_NEW,如果错误拼写为REQUIRED_NEW会直接导致注解不生效。


问题2:非EJB实现的普通Java类上添加@TransactionAttribute(REQUIRES_NEW)是否会被容器识别

@TransactionAttribute是EJB规范定义的专属组件注解,仅对容器托管的EJB组件生效,普通非EJB实现的Java类不属于EJB容器的管理范围,容器不会扫描、识别这类普通类上的EJB事务注解。

因此你描述的场景中,Child类对应方法上的该注解会被直接忽略,容器不会为其创建新事务,Child方法会运行在Parent无状态会话Bean调用它时的当前事务上下文中。


内容的提问来源于stack exchange,提问作者Shan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:12:02