Membuat Manajer Transaksi Superior

Di KTM, manajer transaksi yang unggul adalah manajer sumber daya yang menciptakan pendaftaran unggul untuk transaksi yang diikutinya. Pendaftaran yang unggul adalah pendaftaran yang memberi manajer sumber daya kemampuan untuk mengoordinasikan operasi penerapan untuk transaksi pendaftaran. Dengan kata lain, baik klien transaksi atau manajer transaksi unggulan dapat memulai urutan pra-persiapan/persiapan/penerapan untuk transaksi.

Setelah manajer sumber daya membuat pendaftaran yang unggul untuk transaksi, KTM menolak semua panggilan ke ZwCommitTransaction untuk transaksi tersebut. Oleh karena itu, klien transaksi tidak dapat melakukan transaksi seperti itu. Sebaliknya, manajer sumber daya yang membuat pendaftaran unggul harus memanggil ZwPrepareEnlistment, ZwPrepareEnlistment, dan ZwCommitEnlistment.

Kapan Harus Membuat Manajer Transaksi Superior

Misalkan Anda ingin mengintegrasikan komponen sistem pemrosesan transaksi (TPS) dengan KTM, tetapi komponen berisi kemampuan manajemen transaksi non-KTM sendiri yang dapat dipanggil klien. Dalam situasi seperti itu, Anda mungkin harus membuat manajer transaksi yang unggul.

Misalnya, komponen Anda menyediakan antarmukanya sendiri yang digunakan klien untuk membuat dan melakukan transaksi. Karena klien komponen Anda tidak memanggil KTM untuk membuat atau melakukan transaksi, komponen Anda harus menjadi manajer transaksi yang unggul ketika Anda mengintegrasikannya ke dalam TPS berbasis KTM.

Cara Membuat Manajer Transaksi Superior

Jika Anda ingin komponen Anda menjadi manajer transaksi yang unggul, komponen tersebut harus melakukan hal berikut:

  1. Panggil ZwCreateResourceManager untuk mendaftar sebagai manajer sumber daya.

  2. Panggil ZwCreateTransaction setiap kali klien komponen Anda membuat transaksi dengan menggunakan antarmuka klien komponen Anda.

  3. Panggil ZwCreateEnlistment, atur bendera ENLISTMENT_SUPERIOR, dan tentukan bendera akses ENLISTMENT_SUPERIOR_RIGHTS dan ENLISTMENT_SUBORDINATE_RIGHTS.

  4. Panggil ZwPrepareEnlistment, ZwPrepareEnlistment, dan ZwCommitEnlistment saat klien komponen Anda memanggil antarmuka klien komponen Anda untuk melakukan transaksi.

KTM hanya mengizinkan satu pendaftaran unggul per transaksi. Manajer sumber daya lainnya dapat membuat pendaftaran tambahan. Pendaftaran ini disebut pendaftaran subordinat karena tidak dapat memulai operasi penerapan.

Untuk mengembalikan pendaftaran yang unggul, manajer transaksi unggul Anda memanggil ZwRollbackEnlistment.

Untuk memulihkan pendaftaran yang unggul, manajer transaksi unggul Anda memanggil ZwRecoverEnlistment.

Ketika manajer transaksi yang unggul melakukan, menggulung balik, atau memulihkan transaksi, KTM mengirimkan pemberitahuan transaksi ke semua pendaftaran bawahan sehingga mereka dapat berpartisipasi.

TPS yang mencakup manajer transaksi unggul tidak dapat menggunakan operasi penerapan fase tunggal.

Selama operasi pemulihan, jika KTM tidak dapat menentukan hasil transaksi, KTM mengirimkan pemberitahuan TRANSACTION_NOTIFY_RECOVER_QUERY ke manajer transaksi yang unggul. Sebagai tanggapan, manajer transaksi superior harus memanggil ZwCommitEnlistment jika transaksi dapat dilakukan atau ZwRollbackEnlistment jika transaksi harus digulung balik. Jika manajer transaksi yang unggul tidak dapat menentukan hasil transaksi, manajer transaksi tidak boleh menanggapi pemberitahuan TRANSACTION_NOTIFY_RECOVER_QUERY sampai dapat menentukan hasil.