ASP에서 사용할 수 있는 @ 지시자(directive)에는 여러 가지가 있다. 그 중 트랜잭션을 담당하는 지시자는
@TRANSACTION이다. ASP 페이지에서 사용되는 스크립트가 트랜잭션으로 처리되려면 @TRANSACTION을 사용해야 한
다. 이것을 사용하려면 ASP 3.0, IIS 5.0 이상이 필요하다.
@TRANSACTION을 사용하는 방법은 다음과 같다.
<%@TRANSACTION = value%>
위 value 값에는 다음과 같은 값이 들어갈 수 있다.
Required, Requires_new, Supported, Not_Supported
우선 간단한 테스트를 해보도록 하자. 다음과 같은 코드를 작성한 후 transaction1.asp로 저장시킨다.
<%@ TRANSACTION=Required %>
<%
Server.Execute "transaction2.asp"
Sub OnTransactionCommit()
Response.Write "<p><b>트랜잭션 반영!</b><br>"
Response.Write "OnTransactionCommit() 이벤트 핸들러 발생!"
End Sub
Sub OnTransactionAbort()
Response.Write "<p><b>트랜잭션 취소!</b><br>"
Response.Write "OnTransactionAbort() 이벤트 핸들러 발생"
End Sub
%>
@TRANSACTION을 Required로 설정하면 ASP 페이지는 트랜잭션이 없는 것처럼 트랜잭션을 시작하거나 상위 트랜잭
션을 연결시킨다.
다음으로, 다음과 같은 코드를 transaction2.asp로 저장시킨다.
<%@ TRANSACTION=Supported %>
<%
ObjectContext.SetComplete
%>
@TRANSACTION을 Supported로 설정하면 ASP 페이지는 상위 트랜잭션으로 연결시킨다. 즉, 이 transaction2.asp
는 transaction1.asp에서 호출하였으므로 상위 트랜잭션인 transaction1.asp가 시작된다. 여기서
ObjextContext 객체의 SetComplete를 호출하였으므로 이 경우는 트랜잭션으로 정상으로 처리하여 해당 트랜잭션
을 반영하는 경우이다.
이제 이 결과를 실행시켜 보도록 하자. 다음 링크는 transaction2.asp가 ObjectContext.SetComplete일 때
transaction1.asp를 실행한 결과이다.
ObjectContext.SetComplete 결과 테스트(transaction1.asp 실행)
위 링크를 실행시키면 transaction2.asp를 실행시켰다가 ObjectContext.SetComplete를 통해 트랜잭션이 정상적
으로 처리됐다는 호출을 받고 다시 transaction1.asp로 와서 OnTransactionCommit() 이벤트 핸들러가 발생하게
된다.
이번엔, transaction2.asp의 코드 중 ObjectContext.SetComplete를 다음과 같이 SetAbort로 변경해 보자.
<%@ TRANSACTION=Supported %>
<%
ObjectContext.SetAbort
%>
위의 코드대로 수정했으면 transaction2.asp를 저장한 후 다시 transaction1.asp를 실행시켜보자. 다음은 수정
된 transaction2.asp를 호출하는 transaction1.asp이다. 결과를 확인한 후 앞의 결과와 어떻게 다른지 비교해
보기 바란다.
ObjectContext.SetAbort 결과 테스트(transaction1.asp 실행)
위 결과를 확인해서 알겠지만 transaction2.asp를 실행시키면 ObjectContext.SetAbort를 통해 트랜잭션이 취소
되므로 다시 transaction1.asp로 와서 OnTransactionAbort() 이벤트 핸들러가 발생하게 된다.
지금까지 트랜잭션으로 여러 ASP 페이지를 연결시키는 방법에 대해 살펴보았다. 여기서 주의해야할 점은
@TRANSACTION 지시자를 사용할 경우 ASP 페이지의 첫 번째 줄에 위치해야 한다는 것이다. 그렇지 않을 경우 스크
립트 오류가 발생하므로 주의하기 바란다.
@TRANSACTION이다. ASP 페이지에서 사용되는 스크립트가 트랜잭션으로 처리되려면 @TRANSACTION을 사용해야 한
다. 이것을 사용하려면 ASP 3.0, IIS 5.0 이상이 필요하다.
@TRANSACTION을 사용하는 방법은 다음과 같다.
<%@TRANSACTION = value%>
위 value 값에는 다음과 같은 값이 들어갈 수 있다.
Required, Requires_new, Supported, Not_Supported
우선 간단한 테스트를 해보도록 하자. 다음과 같은 코드를 작성한 후 transaction1.asp로 저장시킨다.
<%@ TRANSACTION=Required %>
<%
Server.Execute "transaction2.asp"
Sub OnTransactionCommit()
Response.Write "<p><b>트랜잭션 반영!</b><br>"
Response.Write "OnTransactionCommit() 이벤트 핸들러 발생!"
End Sub
Sub OnTransactionAbort()
Response.Write "<p><b>트랜잭션 취소!</b><br>"
Response.Write "OnTransactionAbort() 이벤트 핸들러 발생"
End Sub
%>
@TRANSACTION을 Required로 설정하면 ASP 페이지는 트랜잭션이 없는 것처럼 트랜잭션을 시작하거나 상위 트랜잭
션을 연결시킨다.
다음으로, 다음과 같은 코드를 transaction2.asp로 저장시킨다.
<%@ TRANSACTION=Supported %>
<%
ObjectContext.SetComplete
%>
@TRANSACTION을 Supported로 설정하면 ASP 페이지는 상위 트랜잭션으로 연결시킨다. 즉, 이 transaction2.asp
는 transaction1.asp에서 호출하였으므로 상위 트랜잭션인 transaction1.asp가 시작된다. 여기서
ObjextContext 객체의 SetComplete를 호출하였으므로 이 경우는 트랜잭션으로 정상으로 처리하여 해당 트랜잭션
을 반영하는 경우이다.
이제 이 결과를 실행시켜 보도록 하자. 다음 링크는 transaction2.asp가 ObjectContext.SetComplete일 때
transaction1.asp를 실행한 결과이다.
ObjectContext.SetComplete 결과 테스트(transaction1.asp 실행)
위 링크를 실행시키면 transaction2.asp를 실행시켰다가 ObjectContext.SetComplete를 통해 트랜잭션이 정상적
으로 처리됐다는 호출을 받고 다시 transaction1.asp로 와서 OnTransactionCommit() 이벤트 핸들러가 발생하게
된다.
이번엔, transaction2.asp의 코드 중 ObjectContext.SetComplete를 다음과 같이 SetAbort로 변경해 보자.
<%@ TRANSACTION=Supported %>
<%
ObjectContext.SetAbort
%>
위의 코드대로 수정했으면 transaction2.asp를 저장한 후 다시 transaction1.asp를 실행시켜보자. 다음은 수정
된 transaction2.asp를 호출하는 transaction1.asp이다. 결과를 확인한 후 앞의 결과와 어떻게 다른지 비교해
보기 바란다.
ObjectContext.SetAbort 결과 테스트(transaction1.asp 실행)
위 결과를 확인해서 알겠지만 transaction2.asp를 실행시키면 ObjectContext.SetAbort를 통해 트랜잭션이 취소
되므로 다시 transaction1.asp로 와서 OnTransactionAbort() 이벤트 핸들러가 발생하게 된다.
지금까지 트랜잭션으로 여러 ASP 페이지를 연결시키는 방법에 대해 살펴보았다. 여기서 주의해야할 점은
@TRANSACTION 지시자를 사용할 경우 ASP 페이지의 첫 번째 줄에 위치해야 한다는 것이다. 그렇지 않을 경우 스크
립트 오류가 발생하므로 주의하기 바란다.
'asp' 카테고리의 다른 글
Microsoft CAPICOM (0) | 2010.02.22 |
---|---|
IsNull과 IsEmpty 의 차이점 비교 (0) | 2010.02.09 |
asp (0) | 2010.01.08 |
HTMLEncode / URLEncode (0) | 2010.01.08 |
덱스트 DEXT 업로드 (0) | 2009.12.21 |