2011-02-23 3 views
0

jta-data-source를 정의한 경우 JPA에서 트랜잭션을 얻는 방법을 알려줄 수 있습니까?JPA의 연결

감사합니다,

사티 JTA 데이터 소스와

답변

3

이 작업은 연결에서 수행하는 것은 JTA 트랜잭션의 일부입니다. 이것은 JTA 트랜잭션을 시작하고 커밋하거나 롤백해야한다는 것을 의미합니다.

이 작업을 수행하는 가장 쉬운 방법은 세션 빈 내부의 JPA의 일을하는 것입니다 : 그것을 떠날 때 트랜잭션이 doStuff() 방법을 입력 할 때 시작 및 종료됩니다이 경우

@Stateless 
public class SomeBean { 

    @PersistenceContext 
    private EntityManager entityManager; 

    public void doStuff() { 
     // … do some stuff 
     entityManager.persist(someObj); 
    } 
} 

.

하지만, 어떤 이유로 (예 : JSF 관리 빈, 서블릿, 서블릿 필터, 등), 직접 API 사용할 수있는 콩의 다른 유형에 수동으로 거래를 시작하려면 :

public class SomeBean { 

    @Resource 
    private UserTransaction tx; 

    public void doStuff() { 
     try { 
      tx.begin(); 
      // … do some stuff 
      entityManager.persist(someObj); 
      tx.commit(); 
     } 
     catch (Throwable t) { 
      tx.rollback(); 
      throw t; 
     } 
    } 
} 

세션 빈과 소위 선언적 트랜잭션을 사용하는 것이 거의 항상 권장되는 방법입니다.