我正在實現一個EJB應用程序。在這一點上,我需要一個交易。我需要在行中執行3個方法,如果一個失敗,所有的東西都應該回滾。 這裏:http://www.conceptgo.com/gsejb/eb04.html,我找到了一個教程。 我的代碼:在EJB中使用javax.transaction.UserTransaction實現事務
try {
javax.transaction.UserTransaction ut = (UserTransaction) ctx.lookup("java:comp/UserTransaction");
ut.begin();
Feeds feed = loadFeed(url);
try{
em.persist(feed);
uf.setFeedId(feed.getFeedId());
uf.setUserId(user_id);
em.persist(uf);
}catch (EntityExistsException e){
ut.rollback();
return false;
}catch (IllegalArgumentException ea){
ut.rollback();
return false;
}
if (feed.getFeedId()!= null && feed!=null) {
ut.commit();
}else{
ut.rollback();
return false;
}
當我運行我的應用程序,我得到一個錯誤信息:
Caused by: java.lang.IllegalStateException: BaseTransaction.checkTransactionState
- ARJUNA016051: thread is already associated with a transaction
任何人都知道什麼原因,如何解決呢?
你好。感謝您的答覆。聽起來不錯。但是,我覺得我所做的命令並不相互關聯。不知道爲什麼ejb會執行交易fior不相關的東西?首先我堅持Feed類對象,然後是UserFeed類型對象。 em.persist(飼料); uf.setFeedId(feed.getFeedId()); uf.setUserId(user_id); em.persist(uf); – Sermilion
好的,如果您確實需要自己管理事務,則需要聲明您的bean將自己管理事務,然後使用UserTransactions。我已經在上面更新了我的答案。 – Raylite3