2016-11-28 42 views
0

何時用JPA(EclipseLink 2.0)提交事務?何時交易JEE JPA(EclipseLink 2.0)?

這是我的問題:

public void methodA() 
{ 
    while(something) 
    { 
     methodB(); 
    } 
} 

public void methodB() 
{ 
    //Insert new client into Client table. 
} 

比方說,這需要10分鐘methodA完成。如果我偷看數據庫的客戶端表,而methodA運行,我看不到任何行。這意味着在methodB結束後,該事務未提交。但是如果我等到methodA完成,那麼客戶端就會出現在數據庫中。

我希望每個交易在methodB結束後提交。我怎樣才能做到這一點?

編輯:我希望應用程序容器(Glassfish)負責「提交」。我不想通過調用實體管理器來做到這一點。我正在尋找諸如methodB()以上的註釋。這兩種方法都在單例bean中。

+1

去哪裏你把你的交易的定義/劃分?很明顯,任何人都可以調用em.getTransaction()並在使用本地事務時提交它, –

+0

我不想自己犯。我想要應用程序容器來照顧它(Glassfish 3.1.2.2)。 –

回答

0

使用@Stateless EJB bean時,事務在離開EJB時默認提交(默認情況下)。

看跌的methodB()在單獨的EJB。(假設了methodA()不是EJB)

+0

嗯,我想這可能是一個解決方案......但它會嚴重影響我的設計。沒有更好的方法來做到這一點?也許在methodB之上的註釋? –

+0

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)方法詮釋。但是隻有當從其他類調用它時才創建新的事務,然後「this」。 –