2015-05-04 92 views
3

在遺留代碼中,我解決了嵌套事務的問題。 (春,CDI等不能使用只有純粹的JPA(的EclipseLink))EntityManager嵌套事務原子性

em.getTransaction().begin(); 
em.persist(client); 

em2.getTransaction().begin(); 
em2.persist(client1);   //saved into DB 
em2.getTransaction().commit(); 

em.getTransaction().rollback(); 


public void method(){ 
    EntityManager em = entityManagerFactory.createEntityManager(); 
    em.getTransaction().begin(); 
    em.persist(client); 

    nestedTransactionMethod(); 

    em.getTransaction().rollback(); 
} 

public void nestedTransactionMethod(){ 
    EntityManager em = entityManagerFactory.createEntityManager(); 
    em.getTransaction().begin(); 
    em.persist(client); 
    em.getTransaction().commit(); 
} 

的問題是,當我把裏面其中打開事務的另一種方法自交易比它不表現基本方法。有沒有解決方案如何實現這個沒有提供開放的實體管理器作爲參數?

回答

5

JPA和JTA不支持嵌套事務。

當你需要一個整體交易管理系統。比使用一個。 有很多可能性。 Spring是其中之一,或者是應用程序服務器中的JavaEE容器管理系統。 您也可以使用符合JTA的交易管理器自行處理整個操作。我告訴你一個人寫了一個基於Jboss TM的分佈式事務管理系統 - >不這樣做,這並不容易,而且會花費大量的時間。