Konsep Dispenser 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.)

Catatan

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

 

Secara arsitektur, sistem dispenser sumber daya COM+ terdiri dari dispenser sumber daya dan manajer dispenser. Dispenser sumber daya adalah komponen yang disediakan 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 diekspos ke aplikasi dan dapat menjadi antarmuka COM atau set antarmuka atau dapat menjadi antarmuka pemrograman aplikasi (API) tempat komponen ditautkan melalui pustaka 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 koordinat 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.

Catatan

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 perlu transaksi. 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 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 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 dispenser sumber daya tidak 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 lalu memanggil metode IDispenserManager::RegisterDispenser, meneruskan pointer IDispenserDriver yang diterapkan dispenser sumber daya. Panggilan ini mengembalikan referensi ke IHolder.

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

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

COM+ Tugas Dispenser Sumber Daya