Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby efektywnie korzystać z transakcji automatycznych, każdy składnik transakcyjny powinien wskazywać, że zakończył swoją pracę. Gdy wystąpienie obiektu zakończy zadanie pomyślnie, powinno ustawić flagi spójności i zakończenia na True, wywołując metodę IObjectContext::SetComplete. Gdy wszystkie wewnętrzne obiekty transakcji wywołają SetComplete, transakcja może zostać zakończona poprzez jawne dezaktywowanie obiektu głównego poprzez wywołanie jego metody SetComplete. Jawnie wskazując, że obiekt główny zakończył swoją pracę, można zmniejszyć długość transakcji.
Gdy metoda obiektu transakcyjnego zakończy się niepowodzeniem, obiekt powinien ustawić swoją flagę spójności na Fałsz i flagę zakończoną na Prawda, wywołując metodę IObjectContext::SetAbort. Wywołując metodę SetAbort, obiekt zwraca kontrolkę do obiektu wywołującego i zapewnia, że transakcja zostanie ostatecznie przerwana.
Jeżeli obiekt wywołujący SetAbort nie jest korzeniem transakcji, transakcja nadal trwa, mimo że nic nie może jej uratować przed ostatecznym przerwaniem. Aby przyspieszyć zakończenie nieudanej transakcji, możesz zgłosić błąd, aby zasygnalizować obiektowi nadrzędnemu, żeby wywołał SetAbort. Do ukończenia obiekt główny powinien następnie wysłać komunikat o błędzie do klienta.
Chociaż istnieje wiele różnych metod obsługi błędów, podejście powinno wyraźnie koordynować komunikację między obiektami wewnętrznymi i obiektem głównym.
Poniższe fragmenty kodu języka Visual Basic pokazują jedno podejście do obsługi błędów. W pierwszym fragmentze obiekt wewnętrzny wywołuje SetAbort, zgłasza błąd i generuje komunikat o błędzie w następujący sposób:
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
W drugim fragmentcie obiekt główny obsługuje błąd i przekazuje komunikat do klienta w następujący sposób:
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
Tematy pokrewne