[英]How to manage java ee transactions?
我目前正在使用Java EE將EntityManager注入Web應用程序,如下所示:
@PersistenceContext
EntityManager em;
@Resource
UserTransaction utx;
我在請求范圍內的JSF Bean中擁有此功能。 它可以工作,但是很痛苦,因為要避免NoTransactionException,我必須像這樣包裝每個DAO方法:
public void saveSomething(Obj toSave) {
EntityManager em = getEntityManager();
UserTransaction utx = getTransaction();
try {
utx.begin();
em.persist(toSave);
utx.commit();
} catch(Exception e) {
logger.error("Error saving",e);
try {
utx.rollback();
} catch(Exception ne) {
logger.error("Error saving",ne);
}
return null;
}
}
}
有什么辦法可以讓容器在僅由WAR文件組成的項目中為我管理事務?
如果您要管理自己的交易,最好的方法是提供一個抽象的DAO為您完成樣板代碼:
@PersistenceContext
EntityManager em;
@Resource
UserTransaction utx;
abstract class AbstractDao<E,ID> implements IDAO<E,ID> {
public ID save(E e) {
try {
utx.begin();
em.persist(e);
utx.commit();
} catch(Exception e) {
logger.error("Error saving",e);
try {
utx.rollback();
} catch(Exception ne) {
logger.error("Error saving",ne);
}
return null;
}
}
}
替代方法是使用容器管理的事務。 請查閱J2EE指南: http : //java.sun.com/javaee/5/docs/tutorial/doc/bncij.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.