programing

지속성 단위는 RESOURCE_LOCAL 또는 JTA로 지정됩니까?

javaba 2022. 9. 30. 10:36
반응형

지속성 단위는 RESOURCE_LOCAL 또는 JTA로 지정됩니까?

아래와 같은 질문이 있습니다.

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

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/Cache)의 작성 및 추적은 사용자가 담당합니다.

  • Entity Manager를 가져오려면 Entity Manager Factory를 사용해야 합니다.
  • 결과 EntityManager 인스턴스는 PersistenceContext/Cache입니다.
  • EntityManagerFactory는 @PersistenceUnit 주석을 통해서만 주입할 수 있습니다(@PersistenceContext는 제외).
  • RESOURCE_LOCAL 유형의 단위를 참조하기 위해 @PersistenceContext를 사용할 수 없습니다.
  • EntityTransaction API를 사용하여 EntityManager에 대한 모든 호출을 시작하거나 커밋해야 합니다.
  • entityManagerFactory.createEntityManager()를 두 번 호출하면 두 개의 개별 EntityManager 인스턴스가 생성되고 그에 따라 두 개의 개별 PersistenceContexts/Caches가 생성됩니다.
  • Entity Manager 인스턴스를 여러 사용하는 것은 거의 권장되지 않습니다(첫 번째 인스턴스를 삭제하지 않으면 두 번째 인스턴스를 생성하지 마십시오).


<투명도 단위 트랜잭션 유형=>과 함께JTA"> 컨테이너는 EntityManager(PersistenceContext/Cache)의 작성과 추적을 수행합니다.

  • EntityManagerFactory를 사용하여 EntityManager를 가져올 수 없습니다.
  • 컨테이너에서 제공하는 EntityManager만 가져올 수 있습니다.
  • EntityManager는 @PersistenceContext 주석을 통해서만 삽입할 수 있습니다(@PersistenceUnit은 제외).
  • @PersistenceUnit을 사용하여 JTA 유형의 단위를 참조할 수 없습니다.
  • 컨테이너에 의해 지정된EntityManager는 JTA 트랜잭션과 관련된 PersistenceContext/Cache에 대한 참조입니다.
  • 진행 중인 JTA 트랜잭션이 없는 경우 PersistenceContext/Cache가 없기 때문에 EntityManager를 사용할 수 없습니다.
  • 동일한 트랜잭션에서 동일한 유닛에 대한 Entity Manager 참조를 가진 모든 사용자는 자동으로 동일한 PersistenceContext/Cache에 대한 참조를 갖게 됩니다.
  • JTA 커밋 시 Persistence Context/Cache가 플러시되고 지워집니다.

Java Persistence API 학습에 관심이 있는 분은 JPA Concepts: JPA 101의 전문 기사를 읽어보시기 바랍니다.

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

resource_local vs JTA는 로컬 트랜잭션 vs 글로벌 트랜잭션에 관한 것입니다.하나의 트랜잭션으로 여러 리소스를 관리할 수 있습니다.

CMT와 BMT는 누가 트랜잭션을 열고 닫는가(애플리케이션 개발자 또는 애플리케이션 서버)에 관한 것입니다.

언급URL : https://stackoverflow.com/questions/1962525/persistence-unit-as-resource-local-or-jta

반응형