商業應用程式常常需要具有在事務內部執行指令碼和元件的能力。事務是一種伺服器操作,即使該操作包括很多步驟(例如,定貨、檢視存貨、付帳等),也只能整體返回操作是成功還是失敗。使用者可以建立在事務內部執行的 asp 指令碼,如果指令碼的任何一部分失敗,整個事務都將會終止。
asp 事務處理是以 microsoft transaction server (mts) 為基礎的。microsoft transaction server (mts) 是乙個事務處理系統,用於開發、配置和管理高效能、可分級的、有魯棒性的企業 internet 和 intranet 伺服器應用程式。transaction server 為開發分布式的,基於元件的應用程式提供了乙個應用程式設計模型。它也為配置和管理這些應用程式提供了乙個執行環境。
建立事務性指令碼的功能內建在 internet information server 和 personal web server 中。如果您安裝了 microsoft transaction server,就可以將元件打包,以使元件在事務內部執行。
關於事務
事務是整體成功或失敗的操作。事務處理用於對資料庫進行可靠地更新。在對資料庫進行許多相關更改或同時更新多個資料庫時,要保證所有更改都被正確執行。如果這些更改中的任何乙個失敗,都需要恢復資料庫表的原始狀態。
如果沒有 mts,您就需要編寫指令碼和元件,手工跟蹤請求的更改情況,以便在某些更改失敗時恢復資料。使用 mts,您只需簡單的將您的指令碼和元件宣告為「需要事務」並讓 mts 處理事務的一致性。事務處理只適用於資料庫訪問;mts 不能對檔案系統或其他的非事務性資源的更改進行恢復操作。應用程式所訪問的資料庫必須為 mts 所支援。目前,mts 支援 sql server 及任何支援 xa 協議(由 x/open 協會制定)的伺服器。mts 將繼續擴充套件對其他資料庫的支援。
事務不能跨越多個 asp 頁。如果乙個事務需要來自多個元件的物件,則須將使用這些物件的操作組合在乙個 asp 頁中。例如,假定有乙個元件用於更新工資單資料庫,還有乙個元件用於更新人力資源資料庫中的員工記錄。為了記錄乙個員工的新的工資資訊,您需要編寫這樣乙個指令碼,該指令碼在乙個事務環境中呼叫這兩個元件,乙個用於更新工資單資料庫,另乙個用於更新人力資源資料庫中的員工等級。
宣告事務性指令碼
在將乙個頁宣告為事務性時,此頁中的任何指令碼命令和物件都執行在同乙個事務環境中。transaction server 處理生成事務的細節並決定事務成功(提交)或失敗(終止)。要將某個頁宣告為事務性,可在頁首新增 @transaction 指令:
value 引數可以是下列之一:
值 意義
requires_new 啟動乙個新的事務。
required 啟動乙個新的事務。
supported 不啟動事務。
not_supported 不啟動事務。
@transaction 指令必須在一頁中的第一行,否則將產生錯誤。必須將該指令新增到需要在事務下執行的每一頁中。當指令碼處理結束時,當前事務即告結束。
大多數應用程式只有一些特定的操作需要事務環境。例如,乙個航空公司的站點可能只需要事務性指令碼處理購票和安排座位,而其他所有指令碼則無須事務環境即可安全執行。因為事務只須用於需要事務處理的頁即可,不要將應用程式的 global.asa 檔案宣告為事務性。
如果事務被終止,transaction server 將恢復對支援事務的資源的任何更改。目前,僅資料庫伺服器完全支援事務,因為資料庫中的資料對於企業應用是最為關鍵的。transaction server 不對硬碟上的檔案、會話和應用程式的變數、集合等的改變進行恢復。然而您可以如下文主題所述,通過編寫事務事件來編寫恢復變數和集合的指令碼。在某些時候,您的指令碼也可以顯式的提交或終止乙個事務,如向檔案寫資料失敗時。
提交或終止指令碼
因為 transaction server 跟蹤事務處理,所以它決定事務是完全成功還是失敗。指令碼可以通過呼叫 objectcontext.setabort 顯式地宣告終止乙個事務。 例如,當乙個事務在從乙個元件收到錯誤訊息、違反商業規範時(例如,帳戶餘額小於 0)或讀寫檔案等非事務性操作失敗時,指令碼就需要終止該事務。如果頁在事務完成之前超時,也必須終止事務。
編寫事務事件
指令碼本身不能決定事務是成功還是失敗。但是,可以編寫提交或終止事務時被呼叫的事件。例如,假設有乙個確認銀行帳戶的指令碼,並且您需要針對事務的不同狀態將不同的頁返回給使用者,那麼就可以使用 ontransactioncommit 和 ontransactionabort 事件來編寫對使用者的不同響應。
welcome to the online banking service
thank you. your transaction is being processed.
在 mts 資源管理器中登記乙個元件
為了參與乙個事務,元件必須在 mts 包中登記,而且必須被配置為需要事務。例如,如果您的指令碼是通過呼叫兩個元件來處理訂單的,乙個更新庫存資料庫,另乙個更新付款資料庫。那麼,這兩個元件就要在同乙個事務環境中執行。transaction server 保證如果任意乙個元件失敗,那麼將不會有資料庫被更新。
事務性的特點
原子性 atomicity 原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。一致性 consistency 事務前後資料的完整性必須保持一致。隔離性 isolation 事務的隔離性是多個使用者併發訪問資料庫時,資料庫為每乙個使用者開啟的事務,不能被其他事務的運算元據所...
事務性的特點
原子性 atomicity 原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。一致性 consistency 事務前後資料的完整性必須保持一致。隔離性 isolation 事務的隔離性是多個使用者併發訪問資料庫時,資料庫為每乙個使用者開啟的事務,不能被其他事務的運算元據所...
資料庫事務性解析
acid acid,指資料庫事務正確執行的四個基本要素的縮寫。包含 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 乙個支援事務 transaction 的資料庫,必須要具有這四種特性,否則在事務過程 transaction pr...