Seri kuliah ASP (21) Membuat skrip transaksional
Penulis:Eve Cole
Waktu Pembaruan:2009-05-30 19:58:32
Aplikasi bisnis seringkali memerlukan kemampuan untuk menjalankan skrip dan komponen di dalam transaksi. Suatu transaksi adalah operasi server. Meskipun operasi tersebut mencakup banyak langkah (misalnya, pemesanan, pemeriksaan inventaris, pembayaran tagihan, dll.), transaksi tersebut hanya dapat mengembalikan keberhasilan atau kegagalan operasi secara keseluruhan. Pengguna dapat membuat skrip ASP yang dijalankan di dalam suatu transaksi. Jika ada bagian dari skrip yang gagal, seluruh transaksi akan dihentikan.
Pemrosesan transaksi ASP didasarkan pada Microsoft Transaction Server (MTS). Microsoft Transaction Server (MTS) adalah sistem pemrosesan transaksi untuk mengembangkan, mengonfigurasi, dan mengelola aplikasi server Internet dan Intranet perusahaan yang berkinerja tinggi, terukur, dan tangguh. Server Transaksi menyediakan model desain aplikasi untuk mengembangkan aplikasi berbasis komponen yang terdistribusi. Ini juga menyediakan lingkungan runtime untuk mengonfigurasi dan mengelola aplikasi ini.
Kemampuan untuk membuat skrip transaksional dibangun di Server Informasi Internet dan Server Web Pribadi. Jika Anda menginstal Microsoft Transaction Server, Anda dapat mengemas komponen agar berjalan di dalam transaksi.
Tentang Transaksi Transaksi adalah keseluruhan keberhasilan atau kegagalan suatu operasi. Pemrosesan transaksi digunakan untuk memperbarui database secara andal. Saat membuat banyak perubahan terkait pada database atau memperbarui beberapa database secara bersamaan, pastikan semua perubahan dijalankan dengan benar. Jika salah satu dari perubahan ini gagal, keadaan asli tabel database perlu dipulihkan.
Tanpa MTS, Anda perlu menulis skrip dan komponen untuk melacak perubahan yang diminta secara manual guna memulihkan data jika beberapa perubahan gagal. Dengan menggunakan MTS, Anda cukup mendeklarasikan skrip dan komponen Anda sebagai "memerlukan transaksi" dan membiarkan MTS menangani konsistensi transaksional. Pemrosesan transaksi hanya berlaku untuk akses database; MTS tidak dapat memulihkan perubahan pada sistem file atau sumber daya non-transaksional lainnya. Database yang diakses aplikasi harus didukung oleh MTS. Saat ini, MTS mendukung SQL Server dan server apa pun yang mendukung protokol XA (ditentukan oleh X/Open Association). MTS akan terus memperluas dukungan untuk database lainnya.
Transaksi tidak dapat mencakup beberapa halaman ASP. Jika suatu transaksi memerlukan objek dari beberapa komponen, operasi yang menggunakan objek tersebut harus digabungkan dalam halaman ASP. Misalnya, asumsikan Anda memiliki komponen yang memperbarui database penggajian dan komponen yang memperbarui data karyawan dalam database sumber daya manusia. Untuk mencatat informasi gaji baru seorang karyawan, Anda perlu menulis skrip yang memanggil kedua komponen ini dalam konteks transaksi, satu untuk memperbarui database penggajian dan yang lainnya untuk memperbarui nilai karyawan di database sumber daya manusia.
Mendeklarasikan skrip transaksional Saat Anda mendeklarasikan halaman sebagai transaksional, perintah skrip dan objek apa pun di halaman tersebut dijalankan di lingkungan transaksi yang sama. Server Transaksi menangani detail pembuatan transaksi dan menentukan apakah transaksi berhasil (commit) atau gagal (berakhir). Untuk mendeklarasikan suatu halaman sebagai halaman transaksional, tambahkan direktif @TRANSACTION di bagian atas halaman:
<%@ TRANSAKSI = nilai %>
Parameter nilai dapat berupa salah satu dari berikut ini:
arti nilai
Requires_New memulai transaksi baru.
Diperlukan memulai transaksi baru.
Didukung tidak memulai transaksi.
Not_Supported Tidak memulai transaksi.
Perintah @TRANSACTION harus berada di baris pertama halaman, jika tidak, kesalahan akan terjadi. Arahan ini harus ditambahkan ke setiap halaman yang perlu dijalankan dalam suatu transaksi. Ketika pemrosesan skrip berakhir, transaksi saat ini berakhir.
Sebagian besar aplikasi memerlukan lingkungan transaksi hanya untuk operasi tertentu. Misalnya, situs maskapai penerbangan mungkin hanya memerlukan skrip transaksional untuk menangani pengaturan tiket dan tempat duduk, sementara semua skrip lainnya dapat berjalan dengan aman tanpa lingkungan transaksional. Karena transaksi hanya perlu digunakan untuk halaman yang memerlukan pemrosesan transaksi, jangan nyatakan file Global.asa aplikasi Anda sebagai file transaksional.
Jika transaksi dibatalkan, Server Transaksi mengembalikan perubahan apa pun ke sumber daya yang didukung transaksi. Saat ini, hanya server database yang sepenuhnya mendukung transaksi karena data dalam database paling penting untuk aplikasi perusahaan. Server Transaksi tidak mengembalikan perubahan pada file, variabel sesi dan aplikasi, koleksi, dll. pada hard disk. Namun, Anda dapat membuat skrip pemulihan variabel dan koleksi dengan menulis peristiwa transaksi, seperti yang dijelaskan dalam topik berikut. Pada waktu tertentu, skrip Anda juga dapat secara eksplisit melakukan atau menghentikan suatu transaksi, seperti ketika penulisan data ke file gagal.
Melakukan atau menghentikan skrip Karena Server Transaksi melacak pemrosesan transaksi, ini menentukan apakah transaksi berhasil atau gagal sepenuhnya. Sebuah skrip dapat secara eksplisit menghentikan transaksi dengan memanggil ObjectContext.SetAbort. Misalnya, skrip perlu menghentikan transaksi ketika menerima pesan kesalahan dari komponen, melanggar spesifikasi bisnis (misalnya, saldo akun kurang dari 0), atau gagal dalam operasi non-transaksional seperti membaca dan menulis file. Jika waktu halaman habis sebelum transaksi selesai, transaksi juga harus dihentikan.
Menulis skrip peristiwa transaksi saja tidak menentukan apakah suatu transaksi berhasil atau gagal. Namun, Anda dapat menulis peristiwa yang dipanggil saat transaksi dilakukan atau dihentikan. Misalnya, jika Anda memiliki skrip yang mengonfirmasi rekening bank, dan Anda perlu mengembalikan halaman berbeda kepada pengguna untuk status transaksi berbeda, Anda dapat menggunakan peristiwa OnTransactionCommit dan OnTransactionAbort untuk menulis respons berbeda kepada pengguna.
<%@ TRANSAKSI = Wajib %>
<%
'Buffer output sehingga halaman yang berbeda dapat ditampilkan.
Respon.Buffer = Benar
%>
<HTML>
<TUBUH>
<H1>Selamat datang di layanan perbankan online</H1>
<%
Setel BankAction = Server.CreateObject("MyExample.BankComponent")
BankAction.Deposit(Permintaan("AcctNum"))
%>
<P>Terima kasih. Transaksi Anda sedang diproses.</P>
</BODI>
</HTML>
<%
' Tampilkan halaman ini jika transaksi berhasil.
SubOnTransactionCommit()
Respon.Tulis "<HTML>"
Respon.Tulis "<BODY>"
Tanggapan.Tulis "Terima kasih. Akun Anda telah dikreditkan."
Respon.Tulis "</BODY>"
Respon.Tulis "</HTML>"
Respon.Flush()
sub akhir
%>
<%
' Tampilkan halaman ini jika transaksi gagal.
SubOnTransactionAbort()
Respon.Hapus()
Respon.Tulis "<HTML>"
Respon.Tulis "<BODY>"
Response.Tulis "Kami tidak dapat menyelesaikan transaksi Anda."
Respon.Tulis "</BODY>"
Respon.Tulis "</HTML>"
Respon.Flush()
Akhiri sub
%>
Mendaftarkan Komponen di MTS Resource Manager Untuk berpartisipasi dalam suatu transaksi, komponen harus terdaftar dalam paket MTS dan harus dikonfigurasi untuk memerlukan transaksi. Misalnya, jika skrip Anda menangani pesanan dengan memanggil dua komponen, komponen yang satu akan memperbarui database inventaris dan komponen lainnya akan memperbarui database pembayaran. Kemudian, kedua komponen ini harus berjalan di lingkungan transaksi yang sama. Server Transaksi menjamin bahwa jika ada komponen yang gagal, tidak ada database yang akan diperbarui. Beberapa komponen tidak memerlukan transaksi; misalnya komponen Ad Rotator.
Daftarkan dan konfigurasikan komponen transaksional menggunakan MTS Resource Manager. Properti transaksi harus diatur ke Memerlukan Transaksi atau Memerlukan Transaksi Baru. Komponen transaksi harus terdaftar dalam paket MTS. Daripada menempatkan komponen dalam paket dalam proses IIS, buatlah paket Anda sendiri. Biasanya, semua komponen harus ditempatkan di perpustakaan komponen. Komponen perpustakaan komponen dapat digunakan oleh beberapa aplikasi ASP dan dijalankan dalam proses aplikasi ASP. Gunakan MTS Explorer untuk membuat paket baru dan atur properti Aktivasi paket ke Perpustakaan.
Komponen transaksional juga dapat didaftarkan dalam paket Server. Paket server biasanya dijalankan sebagai proses terpisah di server. Jika Anda ingin menggunakan pemeriksaan keamanan berbasis grup fungsional atau jika Anda ingin komponen Anda dapat diakses oleh aplikasi di komputer jarak jauh, gunakan paket Server untuk komponen transaksional.
Untuk menggunakan MTS Explorer, Microsoft Transaction Server harus diinstal.
Lingkup Objek Secara umum, jangan menyimpan objek yang dibuat dari komponen MTS di objek Aplikasi ASP atau Sesi. Objek MTS hilang setelah transaksi selesai. Karena objek Sesi dan objek Aplikasi dirancang untuk contoh objek yang digunakan antara halaman ASP yang berbeda, jangan gunakan keduanya untuk menyimpan objek yang dilepaskan pada akhir transaksi.
Skrip ASP adalah akar dari transaksi yang dideklarasikan, titik awal. Setiap objek MTS yang digunakan oleh halaman ASP transaksional dianggap sebagai bagian dari transaksi. Ketika transaksi selesai, objek MTS yang digunakan di halaman tersebut akan hilang, termasuk objek yang disimpan di objek Sesi atau Aplikasi. Setelah titik ini, segala upaya untuk memanggil objek cakupan sesi atau cakupan aplikasi dari halaman transaksional lain akan gagal.
Antrian transaksi Pembaruan database dari server jarak jauh dapat menyebabkan transaksi tertunda atau dihentikan karena penundaan atau kegagalan jaringan. Karena semua bagian transaksi harus dikomit, aplikasi mungkin hang, menunggu pesan komit atau batalkan dari server jarak jauh, atau transaksi mungkin dibatalkan karena pembaruan basis data tidak dapat dikirim.
Untuk pembaruan yang harus diselesaikan secara bersamaan, pendekatan yang benar adalah dengan menghentikan transaksi atau menunda penyelesaian transaksi hingga semua peserta dalam transaksi dapat melakukan komitmen. Misalnya, proses pemesanan suatu maskapai penerbangan harus secara bersamaan mendebit rekening bank pelanggan dan mengkredit rekening bank maskapai tersebut. Jika pembaruan merupakan bagian dari keseluruhan transaksi, namun mungkin lebih lambat dibandingkan pembaruan lainnya, Anda mungkin tidak ingin membuat pelanggan menunggu hingga seluruh proses pembaruan selesai. Misalnya, transaksi pemesanan penerbangan mungkin juga mengirimkan pesanan makanan ke pemasok makanan atau memperbarui tunjangan perjalanan pelanggan. Meskipun operasi ini harus diselesaikan, namun dapat dilakukan nanti.
Server Antrean Pesan Microsoft memungkinkan Anda menggabungkan pembaruan atau serangkaian pembaruan ke dalam pesan transaksional ke server jauh. Server Antrian Pesan menjamin bahwa pembaruan akan dikirim ke server jauh meskipun jaringan saat ini tidak tersedia. Aplikasi Anda akan menerima pesan penerapan dan dapat melanjutkan memproses transaksi.