Vitesse des transactions en notification de l’objet racine
Pour utiliser efficacement les transactions automatiques, chaque composant transactionnel doit indiquer qu’il a terminé son travail. Lorsqu’une instance d’objet termine correctement sa tâche, elle doit définir ses indicateurs cohérents et terminés sur True en appelant la méthode IObjectContext::SetComplete . Lorsque tous les objets intérieurs de la transaction ont appelé SetComplete, la transaction peut être arrêtée en désactivant explicitement l’objet racine en appelant sa méthode SetComplete . En indiquant explicitement qu’un objet racine a terminé son travail, vous pouvez réduire la longueur de la transaction.
Lorsqu’une méthode d’objet transactionnel échoue, l’objet doit définir son indicateur cohérent sur False et son indicateur terminé sur True en appelant la méthode IObjectContext::SetAbort . En appelant la méthode SetAbort , un objet retourne le contrôle à son appelant et garantit que la transaction est finalement abandonnée.
Toutefois, sauf si l’objet appelant SetAbort est la racine de la transaction, la transaction continue à s’exécuter même si rien ne peut l’enregistrer à partir de l’abandon. Pour accélérer l’arrêt d’une transaction ayant échoué, vous pouvez déclencher une erreur pour avertir l’objet racine d’appeler également SetAbort. Pour terminer, l’objet racine doit ensuite envoyer un message d’erreur à son client.
Bien qu’il existe de nombreuses approches différentes que vous pouvez prendre pour gérer les erreurs, votre approche doit coordonner clairement les communications entre les objets intérieurs et l’objet racine.
Les fragments de code Visual Basic suivants illustrent une approche de la gestion des erreurs. Dans le premier fragment, un objet intérieur appelle SetAbort, génère une erreur et génère un message d’erreur, comme suit :
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
Dans le deuxième fragment, l’objet racine gère l’erreur et transmet le message à son client, comme suit :
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
Rubriques connexes