【问题标题】:Using @Transactional with EJBs将 @Transactional 与 EJB 一起使用
【发布时间】:2014-12-03 14:28:46
【问题描述】:

可以在 EJB 中使用 @Transactional 吗?使用 @TransactionAttribute 有什么区别吗?

我已经在这里Difference between @Transactional and @TransactionAttribute 发现@Transactional 用于POJO。我在 Wildfly 中意外地将它用于 EJB,并且没有错误。我想知道行为是否相同或是否存在一些差异。或者可能会忽略 @Transactional 并使用默认级别的 @TransactionAttribute ?我在规范中进行了搜索,但没有发现任何帮助。

编辑:

正如@kostja 所建议的,目前尚不清楚所指的框架问题。我的意思是来自 CDI 的 @Transactional,而不是 Spring。

【问题讨论】:

  • 你在使用@Transactional注解的时候是否开启了跨国拦截器?

标签: jakarta-ee ejb cdi


【解决方案1】:

没有。根据 EJB 3.2 规范的第 7.1 节:

关联 JTA 事务拦截器是非法的(参见 [8]) 与企业 JavaBeans。 EJB 容器应该无法部署 [39]

[39] 此限制可能会在本规范的未来版本中删除。

从容器实现的角度来看,CDI 和 EJB 在不同的层上运行(CDI 代理包装了 EJB 代理)。为了使这项工作顺利进行,需要在两个容器之间进行更深入的集成,以便@Transactional 拦截器和 EJB 容器不会都尝试检查/更新事务上下文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2021-05-15
    • 2018-09-26
    • 2013-09-01
    相关资源
    最近更新 更多