Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa CDI中@Transactional的限制是什么?_Jpa_Jakarta Ee_Ejb_Cdi - Fatal编程技术网

Jpa CDI中@Transactional的限制是什么?

Jpa CDI中@Transactional的限制是什么?,jpa,jakarta-ee,ejb,cdi,Jpa,Jakarta Ee,Ejb,Cdi,我试图在CDI类中使用@Transactional方法,而不是EJB: @javax.inject.Named //失败@javax.enterprise.context.ApplicationScoped //失败@javax.enterprise.context.SessionScoped //works@javax.ejb.Singleton //works@javax.ejb.Stateless 公共类{ @javax.persistence.PersistenceContext 私人实

我试图在CDI类中使用
@Transactional
方法,而不是EJB:

@javax.inject.Named
//失败@javax.enterprise.context.ApplicationScoped
//失败@javax.enterprise.context.SessionScoped
//works@javax.ejb.Singleton
//works@javax.ejb.Stateless
公共类{
@javax.persistence.PersistenceContext
私人实体管理者;
@javax.annotation.PostConstruct
@javax.transaction.Transactional
公共方法(){
em.persist(someEntity);
}
}
当我用
@Singleton
@Stateless
注释
SomeClass
时,一切正常

当我用
@ApplicationScoped
@SessionScoped
注释
SomeClass
时,WildFly 13显示以下错误消息:

执行此操作需要事务(使用事务或扩展持久性上下文)


我的印象是,
@Transactional
从JavaEE7开始就与CDI一起工作。我弄错了吗?或者我只是缺少了一些额外的配置?

我将尝试给出一个简短的列表,列出在尝试使
@Transactional
与CDI一起工作时要查看的内容,以便让答案比注释更有价值:

  • 我们讨论的是
    javax.transaction.Transactional
    ,而不是
    javax.ejb.TransactionAttribute
    ,它适用于ejb
  • 在非JEE应用程序中,它不能开箱即用
  • 我们所说的JEE应用程序是指那些运行完整JEE应用服务器的应用程序;Tomcat开箱即用不支持它
  • 当心类路径问题,特别是在完整的JEE应用服务器中运行时,确保不存在包含注释
    javax.transaction.Transactional
    的jar,例如在WEB-INF/lib中。如果您想在非完整JEE环境中使用它,您需要将它放在类路径中
  • @Transactional
    由最新的JTA规范作为CDI拦截器实现。像这样的:
    • 它不在JEE<7
    • 它具有与任何拦截器相同的限制。例如,不能为初始值设定项方法调用它-
      @PostConstruct
      [这是这个问题中的问题],并且在调用
      这个
      对象的方法时,它不会被激活,小心
  • 我很有信心,更多的错误可能会存在