2009-05-19 11 views
1

私は現在、次のようにWebアプリケーションに私のEntityManagerを注入するためにJava EEを使用しています:Java eeトランザクションの管理方法は?

@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ファイルのみで構成されていますか?

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

} 

代替は、コンテナ管理のトランザクションを使用することです:あなたがあなた自身のトランザクションを管理している場合

答えて