Mempercepat Transaksi dengan Memberi Tahu Objek Akar

Untuk menggunakan transaksi otomatis secara efektif, setiap komponen transaksi seharusnya 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 root 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 yang dilakukan 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 lakukan 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

Mengelola Transaksi Otomatis di COM+