2

UserTransaction ut = 조회 .... ut.beginTransaction(); saveToFooDB(); statelessEjb.transactionSupportedMethod(); // Foo DB에 무언가를 저장합니다. saveToFooDB(); ut.commit();UserTransaction에 액세스하면 2 단계 커밋 또는 XA를 사용한다는 의미입니까?

위의 작업을 수행했다면 DB와 JMS 같은 여러 리소스로 확장되지 않기 때문에 XA 트랜잭션이 아니라는 것을 이해했습니다. 내 이해가 맞습니까?

답변

3

데이터 소스 두 종류의를 구성 할 수 있습니다 :

  • XA :이 데이터 소스는 거래
  • 지역 배포에 참여할 수 : 또한 분산에 참여할 수 없습니다, 비 XA라는 트랜잭션

UserTransaction은 JTA 사양에 정의되어 있습니다. JTA 사양은 dis 참석자를 조정하는 방법을 설명합니다 트리즈 된 거래.

그러나 JTA 사양을 구현하는 응용 프로그램 서버는 자유롭게 많은 최적화 작업을 수행 할 수 있습니다. 그 중 하나는 last-agent-optimization이며 분산 트랜잭션의 마지막 참가자는 로컬이됩니다. 그런 다음 마지막 참가자에 대해 정기적 커밋이 수행됩니다. 참가자가 한 명이라면 항상 그렇습니다. 한마디로

: 둘 이상의 참가자, XA 2 단계 하나 명의 참가자, 대부분의 애플리케이션 서버 지원 로컬 데이터 소스가있는 경우

  • 사용할 필요가 커밋을 가지고하지 않으면

    • 본격적인 2 단계 커밋 프로토콜을 사용하십시오. 글래스 피시를 참조하십시오

    : 글래스 피쉬 documentation

    편집

    단락 "거래 범위는"그것에게 나보다 더 나은 설명합니다. 나는 그것이 모든 응용 프로그램 서버에 대해 동일하다고 생각합니다.

    로컬 트랜잭션은 하나의 비 XA 자원을 포함하고 모든 참여 응용 프로그램 구성 요소가 하나 개의 프로세스 내에서 실행 해야합니다. 로컬 트랜잭션 최적화는 리소스 관리자에 대해 이고 Java 응용 프로그램 응용 프로그램에 대해서는 입니다.응용 프로그램 서버에서

    하는 JDBC 자원이 의 다음과 같은 기준을 충족하는 경우 비 XA 경우 : JDBC 연결 풀 구성에서

    • 를 데이터 소스 클래스 는 구현하지 않습니다 javax.sql.XADataSource 인터페이스.

    • 글로벌 트랜잭션 지원 상자가 선택되어 있지 않거나 리소스 유형 설정이 없거나 이 javax.sql.XADataSource로 설정되어 있지 않습니다.

      • 오직 하나의 비 XA 자원이 사용되는 경우 : 다음 조건에 해당 남아 있으면

      트랜잭션은 현지 남아있다. 추가 비 XA 리소스가 사용되면 트랜잭션은 이 중단됩니다.

    • 트랜잭션 가져 오기 또는 내보내기가 발생하지 않습니다. 여러 자원 또는 여러 참가자 프로세스를 포함

    트랜잭션은 분산 또는 거래 글로벌있다. 가장 최근의 에이전트 최적화가 활성화 된 경우 글로벌 트랜잭션 은 하나의 비 XA 리소스를 포함 할 수 있습니다. 그렇지 않으면 자원은 모두 XA 여야합니다. use-last-agent-optimization 속성은 기본적으로 true로 설정됩니다. 이 속성을 설정하는 방법에 대한 자세한 내용은 트랜잭션 서비스 구성을 참조하십시오. 하나의 XA 리소스가 트랜잭션, 1 단계에서 사용되는 경우

    커밋 그렇지 않으면 트랜잭션이 커밋 프로토콜 2 단계로 조정 이다 일어난다. 당신이 UserTransaction을 시작하고 리소스에 연결 XA 지원으로 선언 된 연결 팩토리를 사용 (예 : 데이터베이스)를 얻으면

  • +0

    WebSphere에서 "last-agent-optimization"은 마지막 자원 최적화 –

    0

    , 그것은 연결이 XA 트랜잭션의 일부가된다는 것을 의미합니다. 또한 JMS 및 데이터베이스와 같은 단일 유형 또는 여러 유형의 자원에 연결하는지 여부는 중요하지 않습니다.

    희망이 있습니다.

    Nitin

    관련 문제