将@Transactional与EJB结合使用

时间:2014-12-03 14:28:46

标签: java-ee ejb cdi

对EJB使用 @Transactional 是否可以?使用 @TransactionAttribute 之间有什么区别吗?

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

编辑:

正如@kostja所说,不清楚提到的框架问题是什么。我的意思是来自CDI的@Transactional,而不是Spring。

1 个答案:

答案 0 :(得分:5)

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

  

关联JTA事务拦截器是违法的(见[8])   使用Enterprise JavaBeans。 EJB容器应该部署失败   这样的申请。[39]

     

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

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