Mempercepat Transaksi dengan Memberi Tahu Objek Akar
Untuk menggunakan transaksi otomatis secara efektif, setiap komponen transaksi harus menunjukkan bahwa ia telah menyelesaikan pekerjaannya. Ketika instans objek berhasil menyelesaikan tugasnya, instans tersebut harus mengatur bendera yang konsisten dan dilakukan ke True dengan memanggil metode IObjectContext::SetComplete . Ketika semua objek interior transaksi telah disebut SetComplete, transaksi dapat dihentikan dengan secara eksplisit menonaktifkan objek akar dengan memanggil metode SetComplete-nya . Dengan secara eksplisit menunjukkan bahwa objek akar telah menyelesaikan pekerjaannya, Anda dapat mengurangi panjang transaksi.
Ketika metode objek transaksional gagal, objek harus mengatur bendera konsistennya ke False dan bendera selesai ke True dengan memanggil metode IObjectContext::SetAbort . Dengan memanggil metode SetAbort , objek mengembalikan kontrol ke pemanggilnya dan memastikan bahwa transaksi pada akhirnya dibatalkan.
Namun, kecuali objek yang memanggil SetAbort adalah akar transaksi, transaksi terus berjalan meskipun tidak ada yang dapat menyimpannya dari akhirnya dibatalkan. Untuk mempercepat penghentian transaksi yang gagal, Anda dapat memunculkan kesalahan untuk memperingatkan objek akar untuk juga memanggil SetAbort. Untuk penyelesaian, objek akar kemudian harus mengirim pesan kesalahan ke kliennya.
Meskipun ada banyak pendekatan berbeda yang dapat Anda ambil untuk menangani kesalahan, pendekatan Anda harus mengoordinasikan komunikasi antara objek interior dan objek akar dengan jelas.
Fragmen kode Visual Basic berikut menunjukkan satu pendekatan untuk penanganan kesalahan. Dalam fragmen pertama, objek interior memanggil SetAbort, menimbulkan kesalahan, dan menghasilkan pesan kesalahan, sebagai berikut:
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
Dalam fragmen kedua, objek akar menangani kesalahan dan meneruskan pesan ke kliennya, sebagai berikut:
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
Topik terkait