Bagikan melalui


Konsep Pengelola Sumber Daya COM+

Komponen aplikasi menggunakan dispenser sumber daya COM+ untuk mengakses dan mengelola informasi status bersama yang tidak dapat ditahan, seperti koneksi antara komponen dan manajer sumber daya tertentu. Pada runtime, kumpulan sumber daya dinamis, seperti koneksi database, koneksi jaringan, koneksi ke antrean, utas, objek, dan blok memori, tersedia untuk dispenser sumber daya. Proses aplikasi mencapai performa tinggi dengan menggunakan jumlah minimum sumber daya yang sering digunakan. Dispenser sumber daya juga dapat mengotomatiskan transaksi dan reklamasi. (Lihat Reklamasi Sumber Daya Otomatis untuk informasi selengkapnya tentang fitur ini.)

Nota

sumber daya adalah apa pun yang dibuat oleh dispenser sumber daya. Misalnya, koneksi ke pengelola sumber daya adalah sumber daya yang umum digunakan. Sumber daya berada di memori dispenser sumber daya dan tidak pernah disalin ke manajer dispenser. Sumber daya hanya diketahui oleh handle buram (RESID) dan mungkin atau mungkin tidak mampu melakukan transaksi. Meskipun sumber daya yang dikelola mungkin sering berupa koneksi ke komponen yang mengelola keadaan tahan lama, koneksi itu sendiri tidak tahan lama. Alat penyalur sumber daya sering menggunakan pengelola sumber daya terkait untuk mempertahankan keadaan stabil.

 

Secara arsitektur, sistem dispenser sumber daya COM+ terdiri dari dispenser sumber daya dan manajer dispenser. Komponen pengeluar sumber daya adalah komponen yang dibuat oleh pengguna yang menyediakan aplikasi dengan antarmuka sederhana ke sumber daya bersama. Manajer dispenser adalah komponen yang disediakan oleh COM+ yang mengoordinasikan aktivitas berbagai dispenser sumber daya.

Dispenser sumber daya adalah komponen pustaka tautan dinamis (DLL) yang menyediakan setidaknya dua antarmuka. Yang pertama, IDispenserDriver, menyediakan manajer dispenser dengan informasi dasar tentang cara membuat, menghancurkan, dan mendaftarkan sumber daya yang dikelolanya. Yang kedua dapat diekspos ke aplikasi dan bisa berupa antarmuka COM, sekumpulan antarmuka, atau bahkan API (antarmuka pemrograman aplikasi) yang dihubungkan ke komponen melalui library impor. Aplikasi dapat memanggil dispenser sumber daya apa pun, yang pada gilirannya dapat menawarkan API apa pun ke aplikasi. Jika dispenser sumber daya adalah komponen Automation, itu dapat diakses dari Microsoft Visual Basic. Dispenser sumber daya dibuat saat komponen aplikasi mengacu padanya.

Manajer dispenser yang disediakan oleh COM+ melacak dispenser sumber daya dan mengkoordinasikan di antara mereka. Ini mengimplementasikan dua antarmuka: IDispenserManager dan IHolder. dispenser sumber daya mendaftarkan diri menggunakan antarmuka IDispenserManager. Manajer dispenser kemudian memberi mereka penunjuk ke IHolder yang mereka gunakan untuk memberi tahu manajer dispenser tentang aktivitas mereka.

Dispenser sumber daya transaksi harus mendaftar dalam transaksi Koordinator Transaksi Terdistribusi (DTC). Ini menyiratkan penggunaan manajer sumber daya internal atau eksternal (ke dispenser sumber daya) yang sesuai dengan transaksi OLE.

Nota

Model pemrograman COM+ mencakup transaksi deklaratif, yang membantu melindungi pekerjaan yang dilakukan oleh objek aplikasi selama masa pakainya. Ketika objek aplikasi menggunakan dispenser sumber daya COM+, pekerjaan yang dilakukannya secara otomatis bertransaksi; artinya, komponen tidak harus secara eksplisit mendeklarasikan transaksi. Transaksi ini didefinisikan dalam spesifikasi Transaksi OLE, diimplementasikan oleh DTC, dan dimulai atas nama objek aplikasi oleh COM+. Lihat Panduan Pengembangan DTC untuk informasi selengkapnya.

 

Sumber daya tidak harus bersifat transaksional. Dispenser sumber daya yang mengumpulkan sumber daya nontransaksial masih dapat mencapai performa tinggi dengan memungkinkan objek aplikasi mengakses kumpulan bersama sumber daya ini. Jenis dispenser sumber daya ini mengembalikan S_FALSE dari metode IDispenserDriver::EnlistResource, yang berarti bahwa dispenser sumber daya tidak mendaftarkan sumber daya karena sumber daya tidak bersifat transaksi.

Dispenser sumber daya juga dapat berfungsi secara independen dari COM+, hanya menyediakan kemampuan pengumpulan sumber daya. Misalnya, jika dispenser sumber daya mengekspos API (seperti ODBC), dispenser sumber daya mungkin adalah sebuah DLL yang diakses oleh aplikasi melalui pustaka impor (atau menggunakan fungsi LoadLibrary dan GetProcAddress). Dispenser sumber daya mungkin juga merupakan komponen COM yang diakses aplikasi dengan memanggil CoCreateInstance. Tanpa COM+, metode EnlistResource dari dispenser sumber daya tidak akan pernah dapat dipanggil karena manajer dispenser tidak memiliki pengetahuan tentang transaksi komponen saat ini.

Saat startup, DLL dispenser sumber daya harus mendaftarkan dirinya dengan manajer dispenser. Manajer dispenser adalah eksekutif pengendali yang mengelola pemuatan dan pembongkaran dispenser sumber daya, menyediakan konteks COM+, dan mengontrol manajer statistik inventarisasi. (Untuk informasi selengkapnya, lihat COM+ Dispenser Manager.) Dispenser sumber daya pertama-tama memanggil fungsi GetDispenserManager dan kemudian memanggil metode IDispenserManager::RegisterDispenser, meneruskan pointer IDispenserDriver yang diterapkan dispenser sumber daya. Pemanggilan ini mengembalikan referensi ke IHolder.

Untuk mematikan, dispenser sumber daya memanggil IHolder::Close. Untuk memastikan penutupan paket yang bersih, dispenser sumber daya harus dapat menangani situasi ketika panggilan terus tiba dari objek bisnis setelah COM+ meminta dispenser untuk menutup.

Topik berikut di bagian ini memberikan informasi lebih rinci tentang layanan dispenser sumber daya COM+:

Tugas Dispenser Sumber Daya COM+