프로그래밍에서는 트랜잭션이 자주 사용됩니다. 소위 트랜잭션은 하나의 작업이 실패하면 다른 모든 단계도 취소되어야 하는 일련의 작업입니다. 예를 들어 ASP를 사용하여 네트워크 하드 디스크 시스템을 개발하는 경우 사용자 등록 부분은 다음을 수행해야 합니다.
사용자 정보를 데이터베이스에 기록하고 사용자가 초기화 사용자 작업 로그를 저장할 폴더를 엽니다.
이 세 단계를 사용해야 합니다. 그렇지 않으면 디스크 작업의 경우 데이터베이스 작업을 취소하지 않고 실패하면 로그인만 가능하고 작업할 수 없는 "사용자 사망" 현상이 발생합니다.
데이터베이스 시스템의 특별한 개발 내역으로 인해 Access에서 DB2까지 모든 것이 트랜잭션을 지원합니다. 따라서 위의 단계는 다음과 같이 표현할 수 있습니다.
On Error Resume Next
Step 1:
트랜잭션 환경에서 사용자 정보를 데이터베이스에 기록
If Err Then
연결을 닫고 Else를 종료합니다.
2단계: If Err Then 폴더 만들기
첫 번째 데이터베이스 작업을 롤백하고 Else를 종료합니다.
3단계: 트랜잭션 환경에서 로그 데이터베이스를 작동하는 경우 Err Then
첫 번째 단계를 롤백하고, 두 번째 단계에서 생성한 폴더를 삭제하고 종료합니다. End If
종료 조건
종료 조건
첫 번째 데이터베이스 작업의 트랜잭션을 제출합니다. 두 번째 데이터베이스 작업의 트랜잭션을 제출합니다.
종료는
매 단계마다 판단해야 하는데, 실패하면 이전 단계를 수동으로 롤백해야 하므로 프로그램이 복잡해지고 이해하기 어려워진다. 나중에 프로그램이 업데이트되고 다른 단계가 추가되면 If...Else...End If의 더 많은 레이어가 중첩되어야 하므로 프로그램 흐름이 더 복잡해집니다.
올바른 해결책은 ASP의 트랜잭션 제어 기능을 사용하는 것입니다. MTS 서비스에 연결하면 IIS는 트랜잭션을 지원하는 다양한 시스템을 제어할 수 있습니다. 프로그램이 "실패" 신호를 보내면 작업이 공식적으로 완료되지 않은 경우에도 트랜잭션을 지원하는 모든 시스템이 자동으로 롤백됩니다. 지원 트랜잭션도 롤백됩니다. 편리한 수동 롤백 방법을 제공합니다. 위의 예는 ASP 트랜잭션 제어 기능을 사용하여 다음과 같이 다시 작성되었습니다.
<%@ TRANSACTION = 필수 %>
오류 발생 시 다음 설정 재개
Conn=Server.CreateObject("ADODB.Connection")
콘.열어....
연결."INSERT...."를 실행합니다.
연결 닫기
Conn=아무것도 설정하지 않음
Set Conn2=Server.CreateObject("ADODB.Connection")
콘2.오픈....
Conn2."INSERT...."를 실행합니다.
연결2.닫기
Conn2=아무것도 설정
FSO=Server.CreateObject("Scripting.FilesystemObject")
설정
FSO.CreateFolder "...."
오류가 발생한 경우
ObjectContext.SetAbort '트랜잭션을 지원하는 모든 구성 요소에 롤백을 알리고 수동 롤백 코드를 실행합니다.
또 다른
ObjectContext.SetComplete
종료 조건
FSO=아무것도 설정하지 않음
Sub OnTransactionAbort
응답."오류" 쓰기
FSO.DeleteFile Server.Mappath("a.txt") 'FSO 수동 롤백 - 폴더 삭제
서브 끝
SubOnTransactionCommit
Response.Write "작업을 성공적으로 완료했습니다"
서브 끝
%>
첫 번째 줄의 <%@ TRANSACTION = 필수 %>는 이 페이지의 ASP 파일에 MTS 트랜잭션 지원이 필요함을 나타냅니다. 중간에 있는 모든 작업은 롤백 문제를 고려하지 않고 정상적인 순서로 작성됩니다. 프로그램 종료 시 오류가 있는지 확인합니다. 그렇다면 ObjectContext의 SetAbort 메서드를 호출합니다. IIS는 MTS 서비스를 통해 트랜잭션을 지원하는 모든 구성 요소(주로 데이터베이스)에 알리고, 오류가 발생하지 않으면 Sub OnTransactionAbort를 실행하여 트랜잭션을 지원하지 않는 작업을 수동으로 롤백합니다. ObjectContext의 SetComplete 메서드인 Sub OnTransactionCommit이 실행되어 성공 메시지를 표시합니다.
전체 ASP 프로그램은 오류 판단 및 롤백 작업을 위해 중복 코드를 작성할 필요가 없으며 나중에 판단하기만 하면 됩니다. 향후 다단계 작업이 추가되더라도 Sub OnTransactionAbort에서만 제어하면 됩니다. 이는 매우 편리하며 프로그래머는 오류 수정 코드를 작성하는 대신 절차적 작성에 집중할 수 있습니다.
실제로 ASP는 더 많은 유용한 기능을 제공하며 이를 사용하기를 기다리고 있습니다. ASP가 스크립팅 언어를 사용한다고 해서 그 기능이 약할 것이라고 생각하지 마십시오.