Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Resource manager mempertahankan data setiap transaksi dan mencatat operasi transaksi. Jika sistem pemrosesan transaksi (TPS) memiliki beberapa manajer sumber daya, setiap manajer sumber daya dapat berpartisipasi dalam operasi penerapan, pembatalan, dan pemulihan setiap transaksi.
Setiap manajer sumber daya harus mengekspor antarmuka yang dapat digunakan klien transaksi untuk mengakses database atau sumber daya lain yang dikelola manajer sumber daya.
Biasanya, resource manager mode kernel harus melakukan tugas berikut dalam urutan yang tercantum:
Membuat aliran log.
Resource manager dapat menggunakan Common Log File System (CLFS), atau beberapa kemampuan pengelogan lainnya, untuk mempertahankan aliran log mereka. Panggilan ke ClfsCreateLogFile membuat aliran log CLFS. Manajer sumber daya harus menggunakan aliran log untuk merekam informasi apa pun yang diperlukan untuk menerapkan, mengembalikan, atau memulihkan transaksi. Selain itu, KTM menggunakan aliran log untuk merekam perubahan status internal yang mungkin diperlukan untuk memulihkan transaksi.
Buat objek manajer transaksi.
Panggilan ke ZwCreateTransactionManager membuat objek manajer transaksi dan menghubungkan manajer sumber daya ke aliran log CLFS tambahan yang ditentukan manajer sumber daya.
Pulihkan status manajer transaksi.
Panggilan ke ZwRecoverTransactionManager membaca aliran log objek manajer transaksi (yang dipertahankan KTM) dan menentukan apakah TPS dimatikan sebelum semua transaksi selesai (misalnya, karena sistem mengalami crash). KTM memulihkan status internalnya berdasarkan informasi dalam aliran log.
Buat objek resource manager.
Panggilan ke ZwCreateResourceManager membuat objek resource manager dan mengaitkannya dengan objek manajer transaksi yang dibuat sebelumnya.
Pulihkan status manajer sumber daya.
Panggilan ke ZwRecoverResourceManager menyebabkan KTM mengirim pemberitahuan TRANSACTION_NOTIFY_RECOVER kepada manajer sumber daya untuk setiap transaksi yang terakhir kali sedang berlangsung sebelum manajer sumber daya dimatikan. Untuk informasi tentang bagaimana manajer sumber daya harus merespons pemberitahuan ini, lihat Menangani Operasi Pemulihan.
Menerima transaksi dari klien.
Biasanya, klien membuat objek transaksi dan menggunakan antarmuka klien resource manager untuk meneruskan GUID objek transaksi ke resource manager. Misalnya, manajer sumber daya mungkin menyediakan rutinitas CreateDataObject yang mirip dengan yang dijelaskan topik Memahami Komponen TPS .
Terlibat dalam setiap transaksi.
Panggilan ke ZwOpenTransaction membuka handle ke objek transaksi, lalu panggilan ke ZwCreateEnlistment membuat pencatatan untuk transaksi. Pendaftaran memungkinkan resource manager untuk menerima serangkaian pemberitahuan transaksi tertentu.
Aktifkan penerimaan pemberitahuan transaksi.
Manajer sumber daya dapat memanggil ZwGetNotificationResourceManager untuk mendapatkan pemberitahuan secara sinkron, atau dapat memanggil TmEnableCallbacks untuk mendaftarkan rutinitas panggilan balik ResourceManagerNotification yang dipanggil KTM setiap kali pemberitahuan tersedia.
Permintaan akses ke sumber daya dari layanan oleh klien, tetapi jangan menjadikan perubahan tersebut permanen.
Setelah klien membuat objek transaksi, biasanya memanggil antarmuka resource manager untuk mengakses sumber daya resource manager. Misalnya, manajer sumber daya untuk database mungkin menerima permintaan untuk membaca dan menulis ke database.
Manajer sumber daya harus merekam hasil operasi baca dan tulis dalam aliran log CLFS atau kemampuan pengelogan lainnya sampai menerima pemberitahuan bahwa operasi transaksi akan dilakukan, digulung balik, atau dipulihkan.
Menerapkan atau mengembalikan operasi klien.
Akhirnya, manajer sumber daya menerima pemberitahuan untuk mulai menerapkan atau membatalkan operasi yang telah dilakukan klien. Sebagai respons, manajer sumber daya harus membuat operasi klien permanen atau membuangnya. Untuk informasi selengkapnya tentang cara menangani pemberitahuan penerapan dan pembatalan, lihat Menangani Operasi Transaksi.
Terkadang, manajer sumber daya mungkin harus mencoba memaksa KTM untuk dengan cepat memberikan pemberitahuan komitmen atau pengembalian, mungkin karena manajer sumber daya telah menentukan bahwa perangkat dihapus secara tiba-tiba. Dalam kasus seperti itu, manajer sumber daya dapat memanggil TmRequestOutcomeEnlistment.
Tutup pegangan objek pendaftaran.
Setelah manajer sumber daya selesai memproses transaksi, ia harus memanggil ZwClose untuk menutup handle objek pendaftaran.
Tutup pegangan objek pengelola sumber daya dan pegangan objek pengelola transaksi.
Sebelum manajer sumber daya membongkar, manajer sumber daya harus memanggil ZwClose untuk menutup handle objek resource manager dan handle objek manajer transaksi.
Langkah 1 hingga 5 harus dilakukan dalam kode inisialisasi resource manager Anda. Misalnya, jika resource manager Anda adalah driver berbasis kernel, kode inisialisasi adalah rutinitas DriverEntry driver.
Langkah 6 hingga 11 biasanya dilakukan dalam kode yang merespons permintaan dari klien transaksional.
Langkah 12 harus dilakukan dalam kode pembersihan akhir pengelola sumber daya Anda, seperti rutin Lepas driver mode kernel.
Membuat Pendaftaran Anggota Read-Only
Pendaftaran baca-saja adalah pendaftaran yang tidak menerima pemberitahuan apa pun dari KTM. Manajer sumber daya dapat menjadikan pendaftaran sebagai hanya-baca dengan memanggil ZwReadOnlyEnlistment. Panggilan ini menyebabkan KTM berhenti mengirimkan pemberitahuan ke resource manager.
Setelah manajer sumber daya Anda memanggil ZwCreateEnlistment, manajer sumber daya dapat memanggil ZwReadOnlyEnlistment kapan saja hingga titik di mana ia biasanya akan memanggil ZwPrepareComplete.
Ada dua alasan mengapa Anda mungkin ingin manajer sumber daya Anda memanggil ZwReadOnlyEnlistment.
Manajer sumber daya Anda telah berpartisipasi dalam transaksi dan, pada titik tertentu sebelum menerima pemberitahuan TRANSACTION_NOTIFY_COMMIT, manajer sumber daya menentukan bahwa tidak perlu lagi berpartisipasi dalam operasi penyelesaian transaksi.
Misalnya, ketika manajer sumber daya menerima pemberitahuan TRANSACTION_NOTIFY_PREPARE, mungkin menentukan bahwa tidak ada operasi transaksi yang mengubah database resource manager. Manajer sumber daya dapat memanggil ZwReadOnlyEnlistment alih-alih ZwPrepareComplete untuk menghapus dirinya sendiri dari transaksi.
Manajer sumber daya Anda tidak pernah berpartisipasi dalam operasi penerapan transaksi apa pun.
Misalnya, resource manager Anda mungkin memantau data yang dikirim klien, tanpa memodifikasi database yang disimpan. Dalam hal ini, manajer sumber daya Anda mungkin memanggil ZwReadOnlyEnlistment segera setelah disebut ZwCreateEnlistment. Selain itu, Anda mungkin memilih untuk membuat manajer sumber daya tersebut volatile, seperti yang dijelaskan di bagian berikutnya dari topik ini.
Setelah manajer sumber daya memanggil ZwReadOnlyEnlistment, manajer sumber daya dapat memanggil ZwClose untuk menutup handel pendaftaran.
Membuat Volatile-Resource Manager
Manajer sumber daya volatil adalah manajer sumber daya yang tidak mempertahankan data tahan lama. Misalnya, Anda dapat membuat manajer sumber daya volatil untuk memantau data yang dikirim klien, jika manajer sumber daya tidak memodifikasi database yang disimpan durably. Manajer sumber daya volatil biasanya tidak mencatat aktivitas transaksi dan oleh karena itu tidak dapat melakukan operasi pemulihan atau pembatalan.
Manajer sumber daya volatil harus mengatur bendera RESOURCE_MANAGER_VOLATILE saat memanggil ZwCreateResourceManager. Jika bendera ini diatur, KTM tidak mencatat informasi apa pun tentang manajer sumber daya di aliran log objek manajer transaksi terkait.
Manajer sumber daya Anda juga dapat mengatur bendera TRANSACTION_MANAGER_VOLATILE saat memanggil ZwCreateTransactionManager. Jika bendera ini diatur, KTM tidak membuat aliran log untuk objek manajer transaksi. Selain itu, setiap manajer sumber daya tambahan yang terhubung ke objek manajer transaksi juga harus volatil dan mengatur bendera RESOURCE_MANAGER_VOLATILE.
Menambahkan Manajer Sumber Daya ke TPS yang Sudah Ada
Jika Anda harus menambahkan manajer sumber daya tambahan ke TPS yang ada, Anda memiliki dua pilihan:
Manajer sumber daya baru Anda memanggil ZwCreateTransactionManager untuk membuat objek manajer transaksinya sendiri.
Gunakan pilihan ini jika resource manager Anda tidak berkomunikasi dengan manajer sumber daya lain di TPS.
Manajer sumber daya baru Anda memanggil ZwOpenTransactionManager untuk terhubung ke objek manajer transaksi yang ada.
Gunakan pilihan ini jika resource manager Anda harus berkomunikasi dengan manajer sumber daya lain di TPS. Manajer sumber daya yang memanggil ZwCreateTransactionManager harus berbagi GUID objek manajer transaksi, nama aliran log, atau nama objek sehingga manajer sumber daya lain dapat memanggil ZwOpenTransactionManager. Manajer sumber daya lainnya ini dapat memanggil ZwQueryInformationTransactionManager untuk mendapatkan informasi tambahan tentang objek manajer transaksi.
Setelah Anda menambahkan manajer sumber daya ke TPS, klien yang mengetahui manajer sumber daya Anda dapat memanggil antarmuka klien resource manager.