<HEAD>
<title>微軟電子書苑</title>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
</HEAD>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<link rel="stylesheet" type="text/css" href="style.css">
<link rel="stylesheet" type="text/css" href="Main.css">
<head>
</head>
</link>
<body leftmargin="15" bgcolor="#f3f3f3" rightmargin="10" >
<STYLE>
* {line-height:25px;} .toolsout {background:#d3d3d3;color:black;cursor:hand}
.toolsover {background:#005ab5;color:white;cursor:hand} .button
{font-size:9pt;line-height:15px;} .notes
{font-size:9pt;line-height:20px;background:#ccccff;} .notestitle
{font-size:9pt;line-height:20px;background:#3366cc;color:white;} .drawclass
{cursor:hand;} .submenu
{line-height:11pt;color:#333333;background:#c0c0c0;cursor:hand;} body{
scrollbar-face-color:#527CA8; scrollbar-shadow-color: #726D8C;
scrollbar-highlight-color: #f3f3f3; scrollbar-3dlight-color:#866C86;
scrollbar-darkshadow-color: #000000; scrollbar-track-color: #866C86;
scrollbar-arrow-color: #ffffff } .NoteClass{ scrollbar-width:10px;
scrollbar-face-color:Yellow; scrollbar-shadow-color: #0066CC;
scrollbar-highlight-color: #0066CC; scrollbar-3dlight-color: #0066CC;
scrollbar-darkshadow-color: #0066CC; scrollbar-track-color: #0066CC;
scrollbar-arrow-color: Black; FONT-SIZE: 9pt; LINE-HEIGHT: 1.3em; FONT-FAMILY:
Verdana; overflow:auto; border-Width:0; Color:white; WIDTH: 170px; HEIGHT:
140px; BACKGROUND-COLOR: #0066CC } a {text-decoration:none;} a:hover
{text-decoration:underline;} -->
</STYLE>
<div id="tools" style="DISPLAY: none; LEFT: 373px; WIDTH: 92px; POSITION: absolute; TOP: 307px" onmousedown="MD(this);" onmouseover="javascript:this.style.display=''" onmouseout="hideStatus(this);">
<table style="FONT-SIZE: 9pt; Z-INDEX: 99; FILTER: alpha(opacity=80)" cellpadding="0" cellspacing="0" border="1" width="100">
<tr align="right">
<TD height="10" style="FONT-SIZE: 9pt" bgcolor="#d6cfce" valign="top">
<IMG id="toolsi" title="鎖定" src="../images/unclick.gif" onclick="changeStatus(this);">
</TD>
</tr>
<tr class="toolsout" onmouseover="javascript:this.className='toolsover';" onmouseout="javascript:this.className='toolsout';">
<td id="Notes_Add" onclick="javascript:addNote(0);" unselectable="on">
新增註解
</td>
</tr>
<tr class="toolsout" onmouseover="javascript:this.className='toolsover';" onmouseout="javascript:this.className='toolsout';">
<td id="mark_add" onclick="javascript:addmark();" unselectable="on">
加入書籤
</td>
</tr>
<tr class="toolsout" onmouseover="javascript:this.className='toolsover';" onmouseout="javascript:this.className='toolsout';">
<td id="line_add" onclick="drawline();" unselectable="on">
畫重點
</td>
</tr>
<tr class="toolsout" onmouseover="javascript:this.className='toolsover';" onmouseout="javascript:this.className='toolsout';">
<td id="line_delete" onclick="undrawline(2)" unselectable="on">
擦掉重點
</td>
</tr>
<tr class="toolsout" onmouseover="javascript:this.className='toolsover';" onmouseout="javascript:this.className='toolsout';">
<td id="line_delete" onclick="undrawline(3)" unselectable="on">
清除所有重點
</td>
</tr>
<!--<tr class=toolsout onmouseover="javascript:this.className='toolsover';" onmouseout="javascript:this.className='toolsout';"><td onclick="javascript:tools.style.display='none';" bgcolor="#dcdcff"> 關閉工具列</td></tr>-->
</table>
</div>
<IMG title="您的書籤" id="bookMarkID" style="DISPLAY: none; POSITION: absolute ;FILTER: alpha(opacity=50)" src="../images/addmark.jpg">
<DIV id="content">
<span id=Layer1><DIV Class="CHNAME">使用MTS的異動服務</DIV><p><Font Class="PARA">我們在</span><span id=Layer2> <a href=default.asp?isbn=957-0312-32-7 target=_new>第三章</span><span id=Layer3></a> 已經介紹過如何在MTS套件當中加入COM DLL,在這一章中,您將會學到如何利用MTS所提供的異動服務(Transaction Services)來建立COM DLL。您會學到有關MTS的異動服務和有關異動的運作原理,同時可以瞭解MTS如何利用Context來追蹤與物件相關的資訊,以及Context在異動處理中所扮演的角色。</span><span id=Layer4></Font><p><Font Class="PARA">此外,您會學到在MTS程式發展模式中,物件狀態(Object State)的重要性,並且學到即時啟動(Just-In-Time Activation)會如何改變物件在MTS環境中的行為。接著,您會瞭解什麼時候儲存MTS元件的物件狀態是最恰當的,以及有哪些不同的方法是您可以使用的。您還可以利用Connection Pooling的機制來有效地管理資料庫的連線。</span><span id=Layer5></Font><p><Font Class="PARA">最後,您會瞭解如何利用Visual Basic來處理在MTS物件內所發生的錯誤,以及對MTS物件進行偵錯。</span><span id=Layer6></Font><DIV Class="HL3">本章目標</span><span id=Layer7></DIV><p><Font Class="PARA">讀完本章後,您將具備下列能力:</span><span id=Layer8></Font><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li>描述什麼叫做異動,異動如何能符合ACID特性。</span><span id=Layer9></li><br></font><font size=2 face=arial color=#3c3c3c><li>描述MTS是如何管理物件的Context。</span><span id=Layer10></li><br></font><font size=2 face=arial color=#3c3c3c><li>使用MTS的</span><span id=Layer11><Font Class="HL9"> ObjectContext</span><span id=Layer12> </Font>物件方法,如</span><span id=Layer13><Font Class="HL9"> SetComplete</span><span id=Layer14> </Font>、</span><span id=Layer15><Font Class="HL9"> SetAbort</span><span id=Layer16> </Font>、</span><span id=Layer17><Font Class="HL9"> EnableCommit</span><span id=Layer18> </Font>或是</span><span id=Layer19><Font Class="HL9"> DisableCommit</span><span id=Layer20> </Font>。</span><span id=Layer21></li><br></font><font size=2 face=arial color=#3c3c3c><li>描述四種管理MTS物件狀態的方法。</span><span id=Layer22></li><br></font><font size=2 face=arial color=#3c3c3c><li>利用Shared Property Manager來儲存MTS物件的共享狀態。</span><span id=Layer23></li><br></font><font size=2 face=arial color=#3c3c3c><li>利用Connection Pooling的機制來有效地管理資料庫的連線。</span><span id=Layer24></li><br></font><font size=2 face=arial color=#3c3c3c><li>在執行階段對MTS物件進行偵錯。</span><span id=Layer25></li><br></font></ul></font><BR><P><DIV Class="HL1">導論</span><span id=Layer26></DIV><P><p><Font Class="PARA">在這一節中,您可以瞭解異動在MTS中所扮演的角色,您同時可以知道MTS如何利用Context來管理物件和異動,最後,您可以學到建立MTS元件時所需要的步驟,讓這個元件可以充分利用異動的優點和其他MTS所能提供的服務。</span><span id=Layer27></Font><P><DIV Class="HL2">異動簡介</span><span id=Layer28></DIV><p><Font Class="PARA">在上一章曾經提到,在MTS環境裡,異動(Transaction)和異動管理都是十分重要的部分。所謂異動是指一整組的資料變動,當一筆異動發生時,異動中的變動不是全部完成(Commit),就是全部都不做(Rollback)。MTS會自動地列出異動中所有的物件和相關的資源,同時也會自動地管理這些異動,讓資料正確地更動。</span><span id=Layer29></Font><p><Font Class="PARA">在下圖中,三個企業應用服務物件協力將錢從一個帳戶轉到另一個帳戶,借方(Debit)會從帳戶中把錢拿出來,而貸方(Credit)則會將錢放到帳戶當中,而轉帳(Transfer)會同時呼叫借方物件和貸方物件,將錢從一個帳戶轉到另一個帳戶中。借方物件和貸方物件都必須要完成它們的工作,這樣異動才能算是成功,假如其中有一個物件不能完成工作,這時異動就算是失敗,所有已經完成的工作都要回復到原來的狀況,唯有這樣才能保持帳戶資料的完整性。</span><span id=Layer30></Font><br><center><a target=_new ><img border=0 src='MVS_04g010.gif'></a></center></span><span id=Layer31><DIV Class="HL3">ACID特性</span><span id=Layer32></DIV><p><Font Class="PARA">異動會將一組資料從一個狀態轉成另一個狀態,如果要讓異動能夠正確,異動便需要具有下列的特性,也就是ACID特性:單一性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和耐久性(Durabil