트랜잭션 구성
트랜잭션 특성 구성 요소 개발자에 대 한 트랜잭션을 자동으로 관리 하는 선언적 속성입니다. 이 특성을 설정하면 구성 요소에서 명시적 트랜잭션 컨트롤을 사용할 필요가 없습니다.
COM+는 구성 요소의 트랜잭션 특성을 사용하여 활성화되는 각 개체에 필요한 트랜잭션 보호 유형을 결정합니다. 요구 사항에 따라 개체는 호출자의 트랜잭션을 공유하거나, 새 트랜잭션을 요구하거나, 트랜잭션 보호 없이 작동할 수 있습니다.
COM+는 다음과 같은 트랜잭션 특성 값을 제공합니다.
-
사용 안 함
-
일반적으로 구성 요소가 리소스 관리자에 액세스하지 않는 것이 확실한 경우에만 이 특성 값을 설정해야 합니다. 트랜잭션 특성을 사용하지 않도록 설정하면 COM+는 개체의 컨텍스트 배치를 결정할 때 구성 요소의 트랜잭션 요구 사항을 무시합니다. 결과적으로 개체는 호출자의 컨텍스트(및 트랜잭션)를 공유할 수 있습니다. COM 구성 요소를 COM+로 마이그레이션할 때 구성되지 않은 COM 구성 요소와 동일한 트랜잭션 동작을 유지하려면 트랜잭션 특성을 사용하지 않도록 설정해야 합니다.
메모
설정되지 않은 구성 요소은(는) COM+ 애플리케이션에 설치되지 않은 COM 구성 요소입니다.
-
지원되지 않음
-
이 특성 값을 설정하면 COM+는 해당 호출자의 트랜잭션 상태에 관계없이 구성 요소에서 만든 모든 개체가 트랜잭션에 참여하지 않도록 합니다. 이 값을 선언하면 개체가 호출자의 트랜잭션에서 투표하지 않거나 자체 트랜잭션을 시작할 수 있는지 확인합니다. 지원되지 않음은 모든 구성 요소의 기본값입니다.
-
지원되는
-
이 특성 값을 설정하면 COM+에서 구성 요소에서 만든 모든 개체가 트랜잭션에 참여하는지 확인합니다. 개체가 자체 트랜잭션을 요구하지 않고 호출자의 트랜잭션에서 공유하도록 하려면 이 값을 선언합니다.
-
필수
-
이 특성 값을 설정하면 COM+에서 구성 요소에서 만든 모든 개체가 트랜잭션인지 확인합니다. COM+에서 필수 설정으로 개체를 활성화하면 해당 호출자의 트랜잭션 상태를 확인합니다. 호출자에게 트랜잭션이 있는 경우 새 개체가 현재 트랜잭션에 포함됩니다. 그렇지 않으면 COM+에서 트랜잭션을 시작하여 새 개체를 트랜잭션의 루트로 만듭니다. 리소스 활동을 수행하는 구성 요소에 대한 기본 설정은 해당 활동에 대한 트랜잭션 보호를 제공하는 데 도움이 되므로 이 설정입니다.
-
새로운 요구 사항 필요
-
이 특성 값을 설정하면 COM+는 호출자의 트랜잭션 상태에 관계없이 구성 요소에서 만든 모든 개체가 트랜잭션의 루트로 새 트랜잭션에 참여하도록 합니다. COM+는 호출자의 트랜잭션과 구별되는 새 트랜잭션을 자동으로 시작합니다.
메모
COM+는 중첩 트랜잭션을 지원하지 않습니다. 한 트랜잭션 개체가 새로 필요로 표시된 다른 구성 요소를 호출하면 COM+는 새로 활성화된 개체에 대한 독립적인 트랜잭션 경계를 만듭니다. 첫 번째 트랜잭션이 두 번째 트랜잭션의 결과를 명시적으로 메모하고 해당 결과에 따라 투표를 수정하지 않는 한 두 번째 트랜잭션은 첫 번째 트랜잭션에 영향을 줄 수 없습니다.
트랜잭션 특성 종속성
다음 표에서는 값이 트랜잭션 특성에 미치는 영향을 포함하여 각 COM+ 트랜잭션 특성 값의 특성을 보여 줍니다. COM+는 모든 트랜잭션 구성 요소에 대해 JIT 활성화 및 동기화 적용합니다.
특성 값 | 새 트랜잭션 | 클라이언트의 트랜잭션 | 트랜잭션 루트 | JIT 활성화 | 동기화 |
---|---|---|---|---|---|
비활성화 |
결코 |
아마 |
결코 |
선택적 |
선택적 |
지원되지 않음 |
결코 |
결코 |
결코 |
선택적 |
선택적 |
지원됨 |
결코 |
클라이언트에 트랜잭션이 있는 경우 |
결코 |
필수 |
필수 |
필수 |
아마 |
클라이언트에 트랜잭션이 있는 경우 |
클라이언트에 트랜잭션이 없는 경우 |
필수 |
필수 |
새로 필요함 |
늘 |
결코 |
늘 |
필수 |
필수 |
트랜잭션 경계
트랜잭션은 시작, 끝 및 정확히 한 번 발생합니다. 실행하는 동안 트랜잭션은 하나 이상의 작업을 수행하기 위해 데이터베이스 또는 큐와 같은 리소스를 호출할 수 있습니다. 각 리소스는 트랜잭션 경계속합니다. 여러 프로세스 및 컴퓨터 경계에 걸쳐 있는 트랜잭션 경계 내의 모든 리소스는 단일 트랜잭션을 공유합니다. 이러한 프로세스 및 컴퓨터 경계에서 일관성을 관리하는 것이 중요합니다.
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을 만든 후 Transaction 1이 실패하면 트랜잭션 2는 트랜잭션 1의 결과에 영향을 받지 않고 실행됩니다. 이 결과가 의도하지 않은 경우 두 트랜잭션의 작업을 단일 트랜잭션으로 접는 것이 좋습니다. 개체 6의 트랜잭션 특성을 필수로 변경하여 수행할 수 있습니다.
매핑 그림은 또한 개체 3과 개체 5가 비트랜잭션적이며, 트랜잭션 1과 2의 범위를 완전히 벗어나 작동하고 있음을 보여 줍니다. 개체 5가 영구 데이터를 업데이트하는 경우 비 트랜잭션 상태를 다시 고려할 수 있습니다. 개체 5는 트랜잭션 특성을 Required로 변경하여 트랜잭션 내에 배치할 수 있습니다.
관련 항목
-
트랜잭션 특성 설정