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
Java EJB3容器管理的持久性-实体何时变为非托管_Java_Jpa_Transactions_Ejb 3.0_Jta - Fatal编程技术网

Java EJB3容器管理的持久性-实体何时变为非托管

Java EJB3容器管理的持久性-实体何时变为非托管,java,jpa,transactions,ejb-3.0,jta,Java,Jpa,Transactions,Ejb 3.0,Jta,对于容器管理的JPA持久性、容器管理的JTA事务以及注入无状态本地会话bean的实体管理器,调用不支持的事务方法对实体的托管状态有什么影响?我读过这篇文章:和类似的线程,但是如果PC都使用来自同一工厂的注入式EMs,那么PC是否会传播到不受支持的方法似乎有些模糊 考虑以下来自一个bean的片段,该bean将检索一个项,然后从另一个bean调用一个方法: @PersistenceContext private EntityManager em; @Inject private LeanBean l

对于容器管理的JPA持久性、容器管理的JTA事务以及注入无状态本地会话bean的实体管理器,调用不支持的事务方法对实体的托管状态有什么影响?我读过这篇文章:和类似的线程,但是如果PC都使用来自同一工厂的注入式EMs,那么PC是否会传播到不受支持的方法似乎有些模糊

考虑以下来自一个bean的片段,该bean将检索一个项,然后从另一个bean调用一个方法:

@PersistenceContext
private EntityManager em;
@Inject
private LeanBean leanBean;

@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void startHere() {
   MyItem item = em.find(MyItem.class, key);  
   leanBean.txMethod(item);
   leanBean.nonTxMethod(item);
}
现在是LeanBean.java。请注意,它的两个方法具有不同的事务传播

@Stateless
@LocalBean
public Class LeanBean {

   @PersistenceContext
   private EntityManager em;

   @TransactionAttribute(TransactionAttributeType.REQUIRED)
   public void txMethod(MyItem item) {
      doSomething(item); // item is managed; persistence context propagated with 
   }                     // transaction context; em is the same as my caller's em

   @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
   public void nonTxMethod(MyItem item) {
      doSomething(item); // caller's transaction context has been suspsended.
   }                     // did em propagate?  is item managed?

}
我无法从规范中理解的内容:

  • 在非Xmethod中,项是否处于分离状态?如果我引用他们会发生什么
  • 如果调用代码段中的方法已被注释为TransactionAttributeType.NOT_SUPPORTED,该怎么办?在LeanBean中的任何一个方法中,item的状态都是
  • 我在这里试图实现的是将一个实体附加到一个方法中,而我不想将它作为事务的一部分

    在非Xmethod中,项是否处于分离状态?该怎么办 如果我引用他们会发生什么

    TransactionAttributeType.NOT_SUPPORTED只是告诉您的方法不需要事务,并且您将无法在EntityManager中调用persist、merge或remove的一种方式。但是您仍然可以调用其他方法,如
    em.find(Someclass.class,objectId)
    。所以我认为这个实体不是处于分离状态

    如果调用代码段中的方法被注释了呢 不支持TransactionAttributeType?将是 在LeanBean中的任何一个方法中

    这将与前面的工作方式完全相同。只要确保在调用方法例如
    startHere()
    中放置
    TransactionAttributeType.NOT\u SUPPORTED
    时,所有后续方法调用事务状态都将被挂起,如果您需要在任何后续调用中进行传输,则必须在该方法上方明确指定
    TransactionAttributeType.REQUIRED


    默认情况下,当您从EJB外部(更不用说从JSP)调用任何会话bean的方法时,除非您明确指定不需要事务,否则事务将自动启动。

    更具体地说,如果在非Xmethod内部,我试图访问MyItem的延迟获取字段。。。。