2009-05-19 2 views
1

내가 현재 다음과 같이 웹 응용 프로그램에 내 EntityManager를 주입하는 자바 EE를 사용하고 있습니다 :Java ee 트랜잭션을 관리하는 방법은 무엇입니까?

@PersistenceContext 
EntityManager em; 

@Resource 
UserTransaction utx; 

내가 요청이있는이 JSF 빈을 범위. 그것은 작동하지만 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 파일만으로 구성된 이처럼?

@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; 
     } 
    } 

} 

대안은 컨테이너 관리 트랜잭션을 사용하는 것입니다 : 당신이 당신의 자신의 트랜잭션을 관리하는 경우

답변