Delen via


Transacties versnellen door het hoofdobject op de hoogte te stellen

Als u automatische transacties effectief wilt gebruiken, moet elk transactioneel onderdeel aangeven dat het zijn werk heeft voltooid. Wanneer een objectexemplaar zijn taak succesvol heeft voltooid, moet het zijn consistente en voltooide vlaggen instellen op True door de methode IObjectContext::SetComplete aan te roepen. Wanneer alle binnenste objecten van de transactie SetComplete-hebben aangeroepen, kan de transactie worden beëindigd door het hoofdobject expliciet te deactiveren door de methode SetComplete aan te roepen. Door expliciet aan te geven dat een hoofdobject het werk heeft voltooid, kunt u de lengte van de transactie verminderen.

Wanneer een transactionele objectmethode mislukt, moet het object de consistente vlag False en de voltooide vlag instellen op True door de methode IObjectContext::SetAbort aan te roepen. Door de methode SetAbort aan te roepen, retourneert een object het besturingselement aan de aanroeper en zorgt ervoor dat de transactie uiteindelijk wordt afgebroken.

Tenzij het object dat SetAbort aanroept de root van de transactie is, blijft de transactie doorgaan, zelfs al kan niets deze uiteindelijk van afbreken redden. Als u de beëindiging van een mislukte transactie wilt versnellen, kunt u een fout genereren om het hoofdobject te waarschuwen om ook SetAbort-aan te roepen. Voor voltooiing moet het hoofdobject vervolgens een foutbericht naar de client verzenden.

Hoewel er veel verschillende benaderingen zijn die u kunt gebruiken om fouten af te handelen, moet uw aanpak de communicatie tussen binnenobjecten en het hoofdobject duidelijk coördineren.

In de volgende Visual Basic-codefragmenten ziet u één benadering voor foutafhandeling. In het eerste fragment roept een interieurobject SetAbortaan, veroorzaakt een fout en wordt als volgt een foutbericht gegenereerd:

Dim ObjCtx As ObjectContext
Dim ErrorCode As Long, Description As String

Set ObjCtx = GetObjectContext()
ObjCtx.SetAbort
ErrorCode = vbObjectError + 5
Description = "Some meaningful message"
Err.Raise ErrorCode, , Description

In het tweede fragment verwerkt het hoofdobject de fout en geeft het bericht als volgt door aan de client:

Sub MyObjMethod1()
  On Error GoTo MyObjMethod1_err
  Dim ObjCtx As ObjectContext
  Dim InteriorObj1 As Cinterior  ' Cinterior is a user-defined object.

  Set ObjCtx = GetObjectContext()
  Set InteriorObj1 = CreateObject ("MyDll.Cinterior")
  InteriorObj1.Method1
  ' If the call completed successfully, then...
  ObjCtx.SetComplete
Exit Sub
  MyObjMethod1_err:
  ' Doom the transaction and exit.
  ObjCtx.SetAbort
  ' Pass the message back to client.
  Err.Raise Err.Number, , Err.Description
End Sub

Automatische transacties beheren in COM+