다음을 통해 공유


트랜잭션 클라이언트 만들기

트랜잭션 클라이언트 리소스 관리자의 내보낸 인터페이스를 사용하여 리소스 관리자가 지원하는 데이터베이스와 같은 리소스에 액세스하는 TPS(트랜잭션 처리 시스템) 구성 요소입니다.

일반적으로 클라이언트는 트랜잭션을 만들고 데이터베이스 작업 집합을 수행한 다음 트랜잭션을 커밋하여 작업을 영구적으로 만듭니다. 클라이언트에 오류가 발생하면 트랜잭션을 커밋하는 대신 트랜잭션의 작업을 제거하기 위해 트랜잭션을 롤백할 수 있습니다.

일반적으로 커널 모드 KTM을 사용하는 트랜잭션 클라이언트는 각 트랜잭션에 대해 다음 작업을 수행해야 합니다.

  1. 트랜잭션 개체를 만듭니다.

    ZwCreateTransaction호출은 트랜잭션 개체를 만들고, 개체 핸들을 제공하고, 클라이언트가 리소스 관리자에 전달할 수 있는 개체 식별자(GUID)를 할당하여 트랜잭션을 식별합니다.

  2. 트랜잭션 개체의 식별자를 가져옵니다.

    클라이언트는 ZwQueryInformationTransaction 호출하여 개체 식별자를 가져올 수 있습니다.

  3. 트랜잭션 개체의 식별자를 리소스 관리자에 전달합니다.

    클라이언트는 일반적으로 리소스 관리자의 내보낸 인터페이스를 호출하여 리소스 관리자에 대한 통신 경로를 열고 경로를 트랜잭션과 연결합니다. 예를 들어 리소스 관리자는 Understanding TPS 구성 요소 항목에서 설명하는 것과 유사한 CreateDataObject 루틴을 제공할 수 있습니다.

  4. 트랜잭션에 포함할 작업을 수행합니다.

    일반적으로 클라이언트는 리소스 관리자의 인터페이스를 호출하여 리소스 관리자의 리소스에 액세스합니다. 예를 들어 데이터베이스 관리자의 클라이언트는 데이터베이스에서 읽고 데이터베이스에 쓸 수 있습니다.

  5. 트랜잭션을 커밋하거나 롤백합니다.

    모든 리소스 작업이 성공하면 클라이언트는 ZwCommitTransaction 호출하여 작업을 영구적으로 만들어야 합니다. 작업이 실패하면 클라이언트는 ZwCommitTransaction 대신 ZwRollbackTransaction 호출해야 합니다. 예를 들어 데이터베이스 관리자의 클라이언트가 일련의 쓰기 작업 중 하나가 실패했다고 판단하는 경우 클라이언트는 ZwRollbackTransaction 호출하여 쓰기 작업이 영구적으로 수행되지 않도록 해야 합니다.

    클라이언트는 ZwCommitTransactionZwRollbackTransaction를 동기적으로 또는 비동기적으로 호출할 수 있습니다. 클라이언트가 이러한 루틴을 동기적으로 호출하는 경우 커밋 또는 롤백 작업이 완료될 때까지 루틴이 반환되지 않습니다.

    트랜잭션을 커밋 및 롤백하는 방법에 대한 자세한 내용은 트랜잭션 작업 처리를참고하세요.

  6. 트랜잭션 핸들 개체를 닫습니다.

    클라이언트가 트랜잭션 처리를 완료한 후 ZwClose 호출하여 트랜잭션 개체의 핸들을 닫아야 합니다.

TPS에는 둘 이상의 리소스 관리자가 포함될 수 있습니다. 클라이언트의 트랜잭션에 두 개의 리소스 관리자가 지원하는 두 개의 데이터베이스와 같은 여러 리소스에 대한 작업이 포함된 경우 클라이언트는 일반적으로 다음을 수행합니다.

  1. 각 트랜잭션에 대해 단일 트랜잭션 개체를 만듭니다.

  2. 각 리소스 관리자에 트랜잭션 개체의 식별자를 전달합니다.

  3. 각 리소스 관리자의 인터페이스를 호출하여 각 데이터베이스에 대한 작업을 수행합니다.

  4. 모든 작업이 오류 없이 완료된 경우 트랜잭션을 커밋하거나 오류가 감지된 경우 트랜잭션을 롤백합니다.

TPS에 뛰어난 트랜잭션 관리자포함된 경우 트랜잭션 클라이언트는 일반적으로 KTM을 호출하지 않습니다. 우수한 트랜잭션 관리자 및 해당 클라이언트에 대한 자세한 내용은 수페리어 트랜잭션 관리자 만들기를 참조하세요.

트랜잭션 클라이언트는 ZwSetInformationTransaction 호출하여 트랜잭션 관련 정보를 설정할 수 있습니다. 예를 들어 클라이언트는 트랜잭션에 대한 제한 시간 값을 설정하거나 설명 문자열을 제공할 수 있습니다. 클라이언트는 ZwQueryInformationTransaction 호출하여 트랜잭션에 대한 정보를 검색할 수 있습니다. 예를 들어 클라이언트는 이 루틴을 호출하여 트랜잭션이 커밋되었는지 또는 롤백되었는지 확인할 수 있습니다.