[java] RESOURCE_LOCAL 또는 JTA와 같은 지속성 단위?

다음과 같은 쿼리가 있습니다.

  1. 이 둘의 차이점은 무엇입니까?
  2. 이 두 가지가 모든 데이터베이스에서 지원됩니까?
  3. JPA TransactionManager와 JTA TransactionManager는 다릅니 까?



답변

JPA 구현은 트랜잭션 자체를 관리 ( RESOURCE_LOCAL)하거나 애플리케이션 서버의 JTA 구현 에서 관리하도록 선택할 수 있습니다.

대부분의 경우 RESOURCE_LOCAL은 괜찮습니다. 이것은 기본적인 JDBC 레벨 트랜잭션을 사용합니다. 단점은 트랜잭션이 JPA 지속성 단위에 로컬이라는 것이므로 여러 지속성 단위 (또는 다른 데이터베이스)에 걸쳐있는 트랜잭션을 원하면 RESOURCE_LOCAL이 충분하지 않을 수 있습니다.

JTA는 JMS 및 JCA와 같은 시스템에서 트랜잭션을 관리하는데도 사용되지만 우리 대부분에게는 매우 이색적인 사용입니다.

JTA를 사용하려면 애플리케이션 서버에서 JTA에 대한 지원과 JDBC 드라이버의 지원이 필요합니다.


답변

다른 답변에 추가로

다음은 매우 유용한 기사 ( Apache TomEE 웹 사이트 에 게시 됨)에서 발췌 한 것으로 OP의 첫 번째 질문에 대한 답변도 도움이 될 수 있습니다 (기사 링크는 아래 참조).


RESOURCE_LOCAL 및 JTA 지속성 컨텍스트 비교


<지속성 단위 트랜잭션 유형 = “RESOURCE_LOCAL”>
당신은 EntityManager의 (PersistenceContext / 캐시) 생성 및 추적에 대한 책임이 있습니다 …

  • 당신은 해야한다 사용
    의 EntityManagerFactory를 EntityManager에를 얻을 수
  • 결과 EntityManager 인스턴스
    PersistenceContext / Cache입니다.
  • 의 EntityManagerFactory는 비아를 주입 할 수
    @PersistenceUnit의 주석 만 (되지 @PersistenceContext)
  • @PersistenceContext를 사용하여 RESOURCE_LOCAL 유형의 단위를 참조 할 수 없습니다.
  • 당신은 해야한다 사용
    EntityTransaction의 시작 / 주위 커밋 API를
    모든 사용자 EntityManger에 전화를
  • entityManagerFactory.createEntityManager ()를 두 번 호출하면
    두 개의 개별 EntityManager 인스턴스가 생성되고 이에 대해
    두 개의 개별 PersistenceContexts / Cache가 생성됩니다.
  • EntityManager 인스턴스 를 두 개 이상 사용하는 것은 거의 좋은 생각
    이 아닙니다 (첫 번째 인스턴스 를 삭제하지 않는 한 두 번째 인스턴스 를 만들지 마십시오).

함께 <지속성 단위 트랜잭션 타입 = “JTA”> 용기 의 EntityManager (PersistenceContext / 캐시)을 생성하고 추적 할 것이다 ..

  • 당신은 할 수없는 사용
    의 EntityManagerFactory를 EntityManager에를 얻을 수
  • 컨테이너에서 제공
    하는 EntityManager 만 가져올 수 있습니다.
  • 의 EntityManager는
    비아를 주입 할 수 @PersistenceContext의
    주석 만 (@PersistenceUnit 생략)
  • @PersistenceUnit을 사용하여 JTA 유형의 단위를 참조 할 수
    없습니다.
  • EntityManager의 컨테이너가 지정된는 인 기준 JTA 트랜잭션과 연관된 PersistenceContext / 캐시한다.
  • 진행중인 JTA 트랜잭션 이 없으면 PersistenceContext / Cache가 없기 때문에 EntityManager를
    사용할 수 없습니다 .
  • 동일한 트랜잭션동일한 단위 에 대한 EntityManager 참조가있는 모든 사람 은 자동으로 동일한 PersistenceContext / Cache에 대한 참조를 갖게됩니다.
  • PersistenceContext / Cache는 JTA 커밋비워 지고 지워집니다.

Java Persistence API를 배우는 데 관심이있는 사람은 자신에게 호의를 베풀고 여기에서 전체 기사를 읽으십시오. JPA 개념 : JPA 101 .


답변

Resource_Local 및 JTA는 트랜잭션 관리자 (트랜잭션 수행 방법)입니다. 이것은 데이터베이스의 속성이 아니라 트랜잭션 조정을 담당하는 구성 요소입니다. JPA 및 JTA 트랜잭션 관리자는 다릅니다. JPA 트랜잭션 관리자는 JPA 트랜잭션을 담당하며 JPA 트랜잭션 만 수행하는 경우 하나를 사용하려고합니다. JTA 트랜잭션 관리자는 범용 트랜잭션 관리자이며 JMS 큐와 같은 다른 리소스를 트랜잭션에 등록 할 수 있습니다. 일반적으로 Java EE 컨테이너는 EJB, JPA 엔티티 등에 대해 JTA 트랜잭션 관리자를 사용합니다.


답변

resource_local 대 JTA는 로컬 트랜잭션 대 글로벌 트랜잭션에 관한 것입니다. 단일 트랜잭션으로 여러 리소스를 관리 할 수 ​​있는지에 대한 것입니다.

CMT 대 BMT는 트랜잭션을 열고 닫는 사람 (응용 프로그램 개발자 또는 응용 프로그램 서버)에 대한 것입니다.


답변