用ASP和COM+進行聯機訂購

來源:互聯網
上載者:User


     我們已經瞭解事務,並知道如何由ASP進行操縱,下面舉個例子。本節將以定義一個商業要求及其相關的需求開始,然後通過使用ASP和COM+的事務來設計和實現。
19.5.1 業務需要
    在這個例子中,業務需要是訂單處理系統的前端部分。訂單處理系統要產生訂單,同時也要調整庫存數量。每次接受訂單,都要正確地調整庫存數量,這一點非常重要。
    由於這個例子由兩個工作群組成(產生訂單和調整庫存數量),將這些任務放在一個單獨的事務中是必要的。這樣就能利用COM+的功能。COM+能為該事務提供所有的主要工作,我們所要做的僅僅是告訴COM+提交或終止事務。
19.5.2 設計
    這個例子能分解為典型的三層結構,而且也適合Microsoft的DNA結構。在高層,這個例子是一個ASP使用者介面(UI),在這裡查看在SQL Server 7.0資料庫中的各種產品。但是, ASP代碼不與資料庫互動,它利用COM組件從未串連的記錄集表單中檢索資料。
    通過ASP使用者介面檢索訂單,該ASP使用者介面調用一個事務性COM組件,這個COM組件把訂單插入到資料庫中,同時也調整庫存數量。
    1. 資料服務
    如上所述,資料庫將駐留於SQL Server 7.0中。選擇SQL Server的原因是它支援COM+( DTC)事務。如果需要的話,也可以使用SQL Server 6.5。
    在這個例子中有兩個表,一個是產品表,另一個是訂單表。為了簡單起見,在稱為ASP Transactions的資料庫中使用的表名分別是Orders和Products,表的結構分別如圖1 9 - 1 4和圖1 9 -1 5所示。

    應該在Products表中加入一些樣本資料,以便能返回到ASP頁中。
    大多數應用程式建立在更複雜的資料庫設計上,其資料庫含有預存程序、觸發器和調度的任務等。然而,作為一個樣本,上述表已經足夠充分了。

    我們已經在本書可下載的原始碼中提供了指令碼,這些指令碼可以建立這些資料表,並把一些資料插入到Products資料表中。
    2. 商務邏輯
    這個例子的商務邏輯將封裝在一個由VB建立的ActiveX DLL中。該DLL含有兩個類:一個類能給調用者提供檢索可用產品列表的能力,另一個類提交訂單。檢索產品列表的類是非事務性的,而更新列表的類是事務性的,以確保同時改變兩個表。
19.5.3 實現
    現在開啟VB並建立新的ActiveX DLL項目。在VB中,設定項目的名字為ASP Trans,預設類的名字設定為Order。增加一個類模型,稱為Products。
    如果希望能在Order類中設定MTS TransactionMode為2-Requires Transaction。當Order類被放入COM+時,它將自動地把組件的Transaction Support 屬性設定為Required。記住,只有從Add File對話方塊把組件加入到一個COM+應用程式時,這種預設設定才會生效。
    在類中加入代碼之前,必須首先設定正確的引用,在References對話方塊中,設定的引用為Microsoft ActiveX Data Objects 2.5 Library和COM+ Services Type Library,如圖1 9 - 1 6所示。

    現在可以把代碼加到這些類中了。
    1. 產品組件
    首先在Products類中增加一個名為GetProducts的函數。GetProducts方法沒有參數,並返回一個未串連的ADO記錄集。

    接著,添加所有錯誤處理、提交或終止事務的代碼。要注意的是這個函數僅返回資料,不更新任何資源。然而,我們仍想使用環境來通知COM+收回這些資源:


    新增加的程式碼完成了GetProducts函數,它對Products資料表執行一個普通的SELECT語句。
    注意用戶端指標的使用與伺服器端指標完全不同。當使用未串連的記錄集工作時,必須使用用戶端指標;它通知ADO立刻擷取所有的資料,而不是一次讀取一點資料。一旦檢索到資料,代碼斷開記錄集,並把值返回給調用者。
    2. 訂單組件
    接著,建立處理使用者訂單的方法。這個方法命名為PlaceOrder,是一個普通的子程式,要求有四個描述訂單的參數。PlaceOrder不是一個函數,也不傳回值。

    PlaceOrder要求的四個參數是使用者姓和名、產品的I D和數量。PlaceOrder程式將完成兩個主要的事情:在Order資料表中增加一條記錄和為產品調整庫存數量。
    下面增加錯誤處理和事務支援代碼。像其他的方法一樣,如果出現錯誤,將轉入Error_Handler部分,並復原事務;如果沒有出錯,將提交事務:


    現在,增加代碼在Orders資料表中插入一條記錄,並調整產品庫存數量。這可以簡單地通過建立一個ADO Connection對象並執行一條INSERT語句和一條UPDATE語句來完成。下面的代碼可以顯式地與一個ADO Command對象一起被執行,但是為了簡單起見,這個例子僅僅使用了一個ADO Connection對象:

    上述是ActiveX DLL所需的所有代碼。對這個商業邏輯來說,剩下的只是編譯D L L並將它安裝到COM+應用程式中。
    在COM+中安裝DLL時,記住調整Order組件中的Transaction Support屬性,以通知COM+在調用時要求一個事務。在Transactions選項卡中,把設定調整為Required,如圖1 9 - 1 7所示。

    應該將Products組件的Transaction Support屬性配置為Not Supported,因為它對資料庫執行唯讀操作。
    3. 使用者介面
    在這個例子中的使用者介面非常簡單,由兩個頁面組成:一個收集使用者訂貨資訊;另一個提交訂單,並通知使用者其訂單是否被成功地接受。
    Orders.ASP頁向使用者顯示各種產品,允許他們產生一個訂單。首先向該頁增加一個包含訂單輸入控制項的表單:


     接著,增加代碼調用ActiveX組件和檢索產品列表,這通過使用Server對象的CreateObject函數建立這個類的執行個體來完成。一旦建立了對該類執行個體的引用,代碼就可以檢索記錄集,並在一個列表框中顯示內容:


    現在有了捕獲使用者輸入的ASP頁面,剩下的工作是處理訂單。這通過另一個稱為PlaceOrder. ASP的ASP頁面完成。PlaceOrder. ASP是一個事務性ASP頁面,它調用ActiveX DLL中的PlaceOrder常式。PlaceOrder常式通過在資料庫中增加訂單記錄並調整產品庫存數量來更新資料庫。下面開始增加PlaceOrder.ASP頁面,在頁面頂部設定Transaction指令,並增加On TransactionCommit和OnTransactionAbort常式:

     下面,填寫事務常式代碼,告訴使用者訂單請求的結果。為了做到這一點,在常式中插入Response.Write語句。


19.5.4 程式驗證
     驗證一下這個例子。把一組訂單增加到系統中。開啟SQL Server,觀察Orders資料表中的記錄,如圖1 9 - 1 8所示。

    為了驗證交易處理過程,再次開啟Component Services MMC外掛程式,並選擇所要求的電腦中的Distributed Transaction Coordinator節點下的Transaction Statistics節點。事務統計監視器偵聽D T C提交和終止事務,並且顯示匯總結果,如圖1 9 - 1 9所示。

    本章闡述了交易處理的概念以及如何在IIS應用程式中通過使用Windows 2000的元件服務( COM+ )來操縱事務。
    Microsoft已經為開發人員提供了一系列強有力的服務,應用程式可以使用這些服務建立。這些服務,例如交易處理(DTC),允許開發人員集中精力解決業務問題,而不必擔心服務之間的底層通訊。




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.