Beschleunigen von Transaktionen durch Benachrichtigen des Stammobjekts

Um automatische Transaktionen effektiv zu verwenden, sollte jede Transaktionskomponente angeben, dass sie ihre Arbeit abgeschlossen hat. Wenn eine Objektinstanz die Aufgabe erfolgreich abgeschlossen hat, sollte sie ihre konsistenten und erledigten Flags auf True festlegen, indem sie die IObjectContext::SetComplete-Methode aufruft . Wenn alle inneren Objekte der Transaktion "SetComplete" aufgerufen haben, kann die Transaktion beendet werden, indem das Stammobjekt explizit deaktiviert wird, indem die SetComplete-Methode aufgerufen wird. Durch explizite Angabe, dass ein Stammobjekt seine Arbeit abgeschlossen hat, können Sie die Länge der Transaktion verringern.

Wenn eine transaktionsale Objektmethode fehlschlägt, sollte das Objekt sein konsistentes Kennzeichen auf "False" und "True" festlegen, indem die IObjectContext::SetAbort-Methode aufgerufen wird. Durch Aufrufen der SetAbort-Methode gibt ein Objekt steuerelement an seinen Aufrufer zurück und stellt sicher, dass die Transaktion letztendlich abgebrochen wird.

Es sei denn, das Objekt, das SetAbort aufruft, ist der Stamm der Transaktion, wird die Transaktion weiterhin ausgeführt, obwohl sie nicht von einem Ende gespeichert werden kann. Um die Beendigung einer fehlgeschlagenen Transaktion zu beschleunigen, können Sie einen Fehler auslösen, um das Stammobjekt zu benachrichtigen, um auch SetAbort aufzurufen. Zum Abschluss sollte das Stammobjekt dann eine Fehlermeldung an den Client senden.

Während es viele verschiedene Ansätze gibt, mit denen Sie Fehler behandeln können, sollte Ihr Ansatz die Kommunikation zwischen Innenobjekten und dem Stammobjekt eindeutig koordinieren.

Die folgenden Visual Basic Codefragmente zeigen einen Ansatz für die Fehlerbehandlung an. Im ersten Fragment ruft ein Inneres Objekt SetAbort auf, löst einen Fehler aus und generiert eine Fehlermeldung, wie folgt:

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

Im zweiten Fragment behandelt das Stammobjekt den Fehler und übergibt die Nachricht an den Client, wie folgt:

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

Verwalten automatischer Transaktionen in COM+