PROSES OPERASI COM+ CRM

Dalam operasi normal, komponen aplikasi yang berjalan dalam proses aplikasi server akan menggunakan COM+ CRM dengan membuat pekerja CRM. Pekerja CRM mengimplementasikan antarmuka COM khusus untuk tugas yang dirancang untuk dilakukan. Komponen aplikasi harus berjalan di bawah transaksi sehingga pekerja CRM mewarisi transaksi komponen aplikasi. Pekerja CRM selalu memerlukan transaksi.

Untuk mengakses COM+ CRM, pekerja CRM terlebih dahulu mendapatkan antarmukaICrmLogControl, yang memungkinkan pekerja CRM menulis rekaman ke log tahan lama. Pekerja CRM mendapatkan antarmuka ini dengan membuat komponen petugas CRM.

Selanjutnya pekerja CRM harus memberi tahu petugas CRM nama CRM Compensator yang ingin digunakannya. Ini dilakukan dengan memanggil metode ICrmLogControl::RegisterCompensator. Setelah metode ini dipanggil, CRM Compensator dibuat oleh infrastruktur CRM ketika transaksi selesai.

Setelah pekerja CRM mendaftarkan CRM Compensator-nya, ia dapat menulis rekaman ke log CRM menggunakan ICrmLogControl. Pekerja CRM harus menulis terlebih dahulu; artinya, pekerja tersebut harus menulis catatan ke log yang menjelaskan tindakan sebelum benar-benar melakukan tindakan, jika crash terjadi segera setelah menyelesaikan tindakan. Tanpa catatan log write-ahead ini, tidak ada cara untuk mengoreksi tindakan.

Selain itu, penulisan sebelumnya berarti bahwa CRM Compensator, yang merupakan komponen yang menerima rekaman log saat pemulihan, harus menangani kasus di mana rekaman log ditulis tetapi tindakan tersebut sebenarnya tidak terjadi. Tindakan oleh Kompensator CRM harus idemponen; artinya, harus dapat dilakukan lebih dari sekali tetapi tetap menghasilkan hasil yang sama. Misalnya, mengatur saldo akun ke nilai $100 adalah tindakan idempoten; menambahkan $100 ke saldo akun tidak.

AntarmukaICrmLogControlmenyediakan dua metode berikut untuk menulis rekaman log:

  • WriteLogRecordVariants digunakan untuk menulis catatan log terstruktur yang dibangun sebagai kumpulan Varian. Ini terutama untuk digunakan saat mengembangkan CRM di Microsoft Visual Basic.
  • WriteLogRecord digunakan untuk menulis catatan log yang tidak terstruktur sebagai BLOB byte. Ini terutama untuk digunakan saat mengembangkan CRM di Microsoft Visual C++. Karena struktur rekaman di C sering terdiri dari sekumpulan header dan bidang yang mungkin tersebar dalam memori, metode WriteLogRecord mengimplementasikan kemampuan pengumpulan yang mengurangi penyalinan data.

Nota

Anda tidak boleh menggunakan jenis penunjuk dalam struktur data dalam catatan log. Pointer tidak lagi valid selama fase pemulihan karena CRM Compensator berjalan dalam proses yang berbeda dari pekerja CRM yang menulis catatan log. Menyertakan jenis penunjuk dalam rekaman log dapat menyebabkan aplikasi mengalami crash atau merusak dirinya sendiri selama pemulihan.

 

Kedua metode tulis ini menulis catatan log ke disk tetapi tidak menjamin durabilitas rekaman. Meskipun membiarkan penulisan tertunda menumpuk sebelum dipaksa ke disk dapat meningkatkan performa, Anda dapat menggunakan metode ICrmLogControl::ForceLog sebagai gantinya untuk menjamin bahwa semua penulisan yang dilakukan oleh CRM tahan lama pada disk, yang penting untuk memulihkan dari kegagalan.

Ketika pekerja CRM selesai dengan tugasnya dan telah menyelesaikan penulisan serta perekaman catatan ke log, pekerja harus melepaskan ICrmLogControl. Ketika transaksi selesai (biasanya karena panggilan komponen aplikasi SetComplete atau SetAbort), infrastruktur CRM membuat komponen CRM Compensator, yang mengimplementasikan antarmukaICrmCompensator atau antarmuka ICrmCompensatorVariants. Antarmuka ini digunakan untuk meneruskan rekaman yang tidak terstruktur (Visual C++) atau terstruktur (Visual Basic) ke CRM Compensator bersama dengan pemberitahuan hasil transaksi.

CRM Compensator pertama kali diberi tahu tentang fase persiapan penyelesaian transaksi dan dapat memilih ya atau tidak untuk permintaan persiapan. Jika CRM Compensator memilih 'tidak', ia tidak akan menerima pemberitahuan pembatalan lebih lanjut. Jika memilih ya atas permintaan persiapan, permintaan tersebut menerima pemberitahuan komit atau batalkan. Jika klien membatalkan, tidak ada pemberitahuan persiapan yang diterima, hanya pemberitahuan pembatalan. CRM Compensator harus siap untuk menangani semua kasus ini, dan juga harus menangani kasus di mana tidak ada catatan log yang berhasil ditulis oleh pekerja CRM. Kompensator CRM tidak boleh berasumsi bahwa instans CRM Compensator yang sama akan menerima pemberitahuan fase 1 (persiapan) dan fase 2 (penerapan atau pembatalan), karena ini dapat terganggu oleh pemulihan.

Biasanya, CRM Compensator menggunakan pemberitahuan pembatalan untuk membalikkan tindakan yang dilakukan oleh pekerja CRM. Pekerja CRM mungkin meninggalkan beberapa status yang tersedia jika perlu membalikkan tindakannya. Status tersebut mungkin sepenuhnya terkandung dalam catatan log, dan jika tidak, CRM Compensator perlu membersihkan status tersebut jika transaksi dilakukan. Ini adalah alasan mengapa CRM Compensator menerima pemberitahuan penerapan. CRM Compensator tidak berjalan di bawah transaksi DTC.

CRM Compensator dapat mencatat rekaman baru jika diperlukan dengan menggunakan ICrmLogControl, yang diterimanya saat penciptaannya. Pekerja CRM dan CRM Compensator juga dapat melupakan catatan log terakhir yang mereka tulis, yang mungkin diperlukan untuk menghindari pemulihan yang tidak perlu.

COM+ Mengkompensasi Konsep Resource Manager

Startup dan Recovery COM+ CRM