다음을 통해 공유


트랜잭션 구성

트랜잭션 특성은 구성 요소 개발자의 트랜잭션을 자동으로 관리하는 선언적 속성입니다. 이 특성을 설정하면 구성 요소에서 명시적 트랜잭션 컨트롤을 사용할 필요가 없습니다.

COM+는 구성 요소의 트랜잭션 특성을 사용하여 활성화되는 각 개체에 필요한 트랜잭션 보호 유형을 결정합니다. 요구 사항에 따라 개체는 호출자의 트랜잭션을 공유하거나, 새 트랜잭션이 필요하거나, 트랜잭션 보호 없이 작동할 수 있습니다.

COM+는 다음과 같은 트랜잭션 특성 값을 제공합니다.

비활성화

일반적으로 구성 요소가 리소스 관리자에 액세스하지 않는 경우에만 이 특성 값을 설정해야 합니다. 트랜잭션 특성을 사용하지 않도록 설정하면 COM+는 개체의 컨텍스트 배치를 결정할 때 구성 요소의 트랜잭션 요구 사항을 무시합니다. 결과적으로 개체는 호출자의 컨텍스트(및 트랜잭션)를 공유할 수 있습니다. COM 구성 요소를 COM+로 마이그레이션할 때 구성되지 않은 COM 구성 요소와 동일한 트랜잭션 동작을 유지하려면 트랜잭션 특성을 사용하지 않도록 설정해야 합니다.

참고

구성되지 않은 구성 요소는 COM+ 애플리케이션에 설치되지 않은 COM 구성 요소입니다.

지원되지 않음

이 특성 값을 설정하면 COM+는 호출자의 트랜잭션 상태 관계없이 구성 요소에서 만든 모든 개체가 트랜잭션에 참여하지 않도록 합니다. 이 값을 선언하여 개체가 호출자의 트랜잭션에 투표하지 않거나 자체 트랜잭션을 시작할 수 없도록 합니다. 지원되지 않음은 모든 구성 요소의 기본값입니다.

지원

이 특성 값을 설정하면 COM+는 구성 요소에서 만든 모든 개체가 있는 경우 트랜잭션에 참여하도록 합니다. 개체가 자체 트랜잭션을 요구하지 않고 호출자의 트랜잭션에서 공유하도록 하려면 이 값을 선언합니다.

필수

이 특성 값을 설정하면 COM+는 구성 요소에서 만든 모든 개체가 트랜잭션인지 확인합니다. COM+에서 필수 설정을 사용하여 개체를 활성화하면 호출자의 트랜잭션 상태 확인합니다. 호출자에게 트랜잭션이 있는 경우 새 개체가 현재 트랜잭션에 포함됩니다. 그렇지 않으면 COM+에서 트랜잭션을 시작하여 새 개체를 트랜잭션의 루트로 만듭니다. 리소스 활동을 수행하는 구성 요소에 대한 기본 설정은 해당 활동에 대한 트랜잭션 보호를 제공하는 데 도움이 되므로 기본 설정입니다.

새로 만들기 필요

이 특성 값을 설정하면 COM+는 호출자의 트랜잭션 상태 관계없이 구성 요소에서 만든 모든 개체가 트랜잭션의 루트로 새 트랜잭션에 참여해야 합니다. COM+는 호출자의 트랜잭션과 구별되는 새 트랜잭션을 자동으로 시작합니다.

참고

COM+는 중첩 트랜잭션을 지원하지 않습니다. 한 트랜잭션 개체가 새로 필요로 표시된 다른 구성 요소를 호출하면 COM+는 새로 활성화된 개체에 대한 독립적인 트랜잭션 경계를 만듭니다. 첫 번째 트랜잭션이 두 번째 트랜잭션의 결과를 명시적으로 메모하고 해당 결과에 따라 투표를 수정하지 않는 한 두 번째 트랜잭션은 첫 번째 트랜잭션에 영향을 줄 수 없습니다.

트랜잭션 특성 종속성

다음 표에서는 값이 트랜잭션 특성에 미치는 영향을 포함하여 각 COM+ 트랜잭션 특성 값의 특성을 보여 줍니다. COM+는 모든 트랜잭션 구성 요소에 대해 JIT 활성화동기화 를 적용합니다.

특성 값 새 트랜잭션 클라이언트의 트랜잭션 트랜잭션 루트 JIT 활성화 동기화
사용 안 함
안 함
가능할 수도 있음
안 함
선택 사항
선택 사항
지원되지 않음
안 함
안 함
안 함
선택 사항
선택 사항
지원됨
안 함
클라이언트에 트랜잭션이 있는 경우
안 함
필수
필수
필수
가능할 수도 있음
클라이언트에 트랜잭션이 있는 경우
클라이언트에 트랜잭션이 없는 경우
필수
필수
RequiresNew
항상
안 함
항상
필수
필수

트랜잭션 경계

트랜잭션에는 시작, 끝이 있으며 정확히 한 번 발생합니다. 실행하는 동안 트랜잭션은 데이터베이스 또는 큐와 같은 리소스를 호출하여 하나 이상의 작업을 수행할 수 있습니다. 각 리소스는 트랜잭션 경계 내에 속합니다. 여러 프로세스 및 컴퓨터 경계에 걸쳐 있는 트랜잭션 경계 내의 모든 리소스는 단일 트랜잭션을 공유합니다. 이러한 프로세스 및 컴퓨터 경계에서 일관성을 관리하는 것이 중요합니다.

COM+는 각 구성 요소에 대해 설정한 트랜잭션 특성의 값에 따라 트랜잭션 경계를 자동으로 관리하여 일관성을 보장합니다. COM+ 트랜잭션은 자동으로 트랜잭션에 참여하도록 지시된 개체로 이동하고 트랜잭션 외부에서 실행하도록 지시된 개체를 바이패스합니다. COM+는 중첩 트랜잭션을 지원하지 않습니다. 대신 COM+ 트랜잭션은 고유하고 수명이 짧습니다.

트랜잭션 경계의 첫 번째 개체는 트랜잭션에 특수하며 트랜잭션의 루트 개체 라고 합니다. 트랜잭션에는 루트 개체가 하나만 있을 수 있습니다. 루트 개체 아래의 트랜잭션 계층 구조에 있는 다른 모든 개체를 내부 개체라고 합니다.

트랜잭션 매핑

개체가 올바른 트랜잭션 경계에 포함되도록 하는 한 가지 방법은 구성 요소 작성을 시작하기 전에 트랜잭션을 매핑하는 것입니다. 트랜잭션을 매핑하여 작성하는 각 구성 요소에 가장 적합한 설정을 결정할 수 있습니다. 구성 요소를 사용하는 방법에 대한 확신이 많을수록 올바른 트랜잭션 특성 값을 선택하는 것이 더 쉽습니다.

런타임에 COM+는 트랜잭션 특성을 확인하여 개체가 새 트랜잭션의 루트인지, 기존 트랜잭션에서 만들거나, 비 트랜잭션 개체로 만들어야 하는지를 확인합니다.

다음 그림에서는 가능한 트랜잭션 매핑을 보여 줍니다. 그림에서 클라이언트는 트랜잭션이 필요한 개체 1을 만듭니다. 트랜잭션이 없으므로 COM+는 Transaction 1을 만들고 개체 1을 루트 개체로 배치합니다. 개체 1은 트랜잭션을 지원하고 트랜잭션 1에 배치되는 개체 2를 만듭니다. 개체 2는 트랜잭션을 지원하지 않으므로 모든 트랜잭션 외부에 배치되는 개체 3을 만듭니다. 또한 개체 2는 트랜잭션이 필요하므로 트랜잭션 1에 배치되는 개체 4를 만듭니다. 개체 3은 트랜잭션을 지원하는 개체 5를 만듭니다. 그러나 개체 5는 트랜잭션 내에 존재하지 않는 개체에 의해 생성되므로 모든 트랜잭션 외부에도 배치됩니다. 개체 4는 새 트랜잭션이 필요한 개체 6을 만들므로 COM+는 Transaction 2를 만들고 개체 6을 루트 개체로 배치합니다. 개체 6은 트랜잭션을 지원하고 트랜잭션 2에 배치되는 개체 7을 만듭니다.

트랜잭션 1 및 트랜잭션 2와의 클라이언트 상호 작용을 보여 주는 다이어그램

앞의 그림에서는 두 가지 잠재적인 문제 영역을 보여 줍니다. 첫째, 대부분의 작업은 두 개의 고유한 트랜잭션 간에 분할됩니다. 개체 4에서 개체 6을 만든 후 트랜잭션 1이 실패하면 트랜잭션 2는 트랜잭션 1의 결과에 영향을 받지 않고 실행됩니다. 이 결과가 의도하지 않은 경우 개체 6의 트랜잭션 특성을 필수로 변경하여 수행할 수 있는 단일 트랜잭션으로 두 트랜잭션의 작업을 접는 것이 좋습니다.

또한 매핑 그림에서는 개체 3 및 개체 5가 트랜잭션이 아닌 경우 트랜잭션 1과 2의 scope 완전히 벗어나는 것을 보여 줍니다. 개체 5가 영구 데이터를 업데이트하는 경우 비 트랜잭션 상태 재고할 수 있습니다. 개체 5는 트랜잭션 특성을 필수로 변경하여 트랜잭션 내에 배치할 수 있습니다.

트랜잭션 특성 설정