Selasa, 23 Desember 2008

ASP BERJALAN DiSERVER LINUX

Kutipanya
Pernah dengar Chili!Soft ASP? Bagi yang belum, Chili!Soft ASP adalah aplikasi yang digunakan untuk menjalankan skrip ASP (Active Server Pages) baik di server berbasis Linux, Windows NT maupun Sun Solaris. Pada umumnya programer menjalankan aplikasi ASP di server berbasis Windows NT, tetapi dengan adanya alternatif ini, aplikasi ASP dapat dijalankan di berbagai platform. Ada beberapa perusahaan webhosting di Indonesia yang menawarkan layanan untuk menjalankan aplikasi ASP di server mereka yang berbasis Linux. Pada umumnya mereka menggunakan Chili!Soft ASP.
Jika kita menjalankan aplikasi ASP di server berbasis Linux, nilai lebihnya antara lain investasi yang dilakukan relatif lebih kecil dan kinerja yang baik dengan menjalankan aplikasi Web di server berbasis Linux. Tidak ada salahnya mulai dipikirkan alternatif ini bagi para programer yang masih menjalankan aplikasi ASP untuk klien mereka di server berbasis Windows NT untuk memigrasi aplikasi mereka ke server berbasis Linux. Untuk memigrasi aplikasi ASP ke server berbasis Linux ini ada beberapa hal yang harus diperhatikan, mulai dari konversi database, perbedaan ADO di IIS (Internet Information Server) dan Chili!Soft ASP, khususnya di Linux dan pengiriman email dari aplikasi ASP.
Tulisan ini akan membahas beberapa hal yang harus dilakukan sehubungan dengan memigrasi aplikasi-aplikasi ASP, khususnya aplikasi database, dari server berbasis Windows NT ke server berbasis Linux serta bagaimana mengatasi kendala-kendala dan hal-hal yang harus diperhatikan. Secara umum apa yang harus dilakukan untuk memigrasi aplikasi database di ASP dari server berbasis Windows NT ke server berbasis Linux adalah mengkonversi database ke format yang didukung di server berbasis Linux, memperhatikan karakteristik objek ADO di Chili!Soft ASP dan membuat kode yang didukung oleh Chili!Soft ASP, selanjutnya lakukan pengujian di server berbasis Linux yang menjalankan aplikasi Chili!Soft ASP. Kode-kode yang diberikan adalah kode untuk Chili!Soft ASP yang tentunya masih dapat dijalankan di IIS.
Kendala Utama: Database
Kendala utama dalam migrasi aplikasi ASP dari server berbasis Windows NT ke server Linux adalah pada database. Banyak aplikasi ASP menggunakan database Microsoft Access, dan sejauh ini format database tersebut tidak didukung oleh server berbasis Linux. Database yang didukung Chili!Soft ASP: DB2, dBase 5, Informix, Microsoft Access (di NT saja), Microsoft SQL Server, MySQL, Oracle, PostgreSQL dan Sybase II.
Dokumentasi Chili!Soft ASP merekomendasikan beberapa alternatif yang dapat kita lakukan jika kita memiliki aplikasi yang menggunakan database Microsoft Access.
Alternatif pertama adalah mengkonversi database kita ke format dBase. Kelemahan dari alternatif ini mengingat dBase adalah database yang berbasis file (file-based database) maka tidak memiliki kelebihan seperti kebanyakan database SQL berbasis server yang ada di pasar saat ini.
Cara kedua mirip dengan cara pertama tetapi database tersebut diekspor langsung melalui ODBC. Cara ini relatif tidak praktis dan rumit sehingga jarang dipilih.

Pilihan selanjutnya adalah adalah dengan menggunakan Oracle atau Sybase yang memiliki utilitas untuk mengkonversi database Microsoft Access ke format mereka. Tetapi pada umumnya perusahaan webhosting kelas menengah tidak menawarkan kedua database tersebut sebagai bagian dari layanan mereka, maka cara ini tidak dibahas lebih lanjut.
Alternatif yang paling umum digunakan adalah mengkonversi database Microsoft Access ke dalam format database MySQL. Database ini memberikan kinerja yang baik dan nativenya memang dijalankan di Unix/Linux, juga database yang satu ini didukung di banyak platform seperti Linux, NT, Solaris dan AIX, sehingga tidak heran jika banyak programer memilih MySQL sebagai solusi untuk kebutuhan database mereka. Di samping itu, saat ini hampir semua perusahaan webhosting berbasis Linux menyediakan MySQL sebagai salah satu layanan mereka.
Konversi Database ke MySQL
Pada dasarnya untuk memigrasi database dari satu jenis database ke database lain biasanya kita menggunakan dump skema dari struktur dan data yang ada. Setelah mengekspor dump skema tersebut dari database yang lama lalu diimpor ke dalam database yang baru sesuai dengan mekanisme yang disediakan. Setelah itu selesailah proses pengkonversian ini.
Skrip yang diperlukan untuk mengkonversi database Access ke MySQL dapat didownload dari www.cynergi.net/exportsql buatan Pedro Freire (pedro.freire@cynergi.net) atau www.mysql.com/ Downloads/Contrib/access-to-mysql.txt buatan Brian Andrews (brian@informate.com).
Berikut adalah langkah-langkah yang harus dilakukan:
• Download skrip dan masukkan ke dalam file database Access.
• Jalankan skrip tersebut dan simpan hasilnya yang berisi dump schema dari database Access ke dalam direktori tertentu.
• Upload file tersebut ke account webhosting Anda, eksekusi skrip yang dihasilkan ke dalam database MySQL. Cara ini dapat dilakukan dengan langsung mengimpor dari konsol MySQL atau dengan menggunakan aplikasi freeware myPHPAdmin, dokumentasi lengkap dapat dilihat di www.phpwizard.net/projects/phpMyAdmin.
Kendala Lain: ADO
Kendala lain dalam memigrasi aplikasi ASP ke server berbasis Linux adalah ADO. Mengapa? Ada beberapa karakteristik dari ADO yang sudah berjalan dengan baik di IIS yang belum diimplementasikan di Chili!Soft ASP. Misalnya updatable query yang biasanya dapat dijalankan di IIS, tidak didukung oleh Chili!Soft ASP yang berbasis Linux. Dengan adanya pembatasan-pembatasan ini, cara untuk mengakses database agak sedikit berbeda di Chili!Soft ASP.
Untuk singkatnya saya akan langsung membahas bagaimana kita membuat skrip ASP di Chili!Soft ASP dengan menggunakan ADO (ActiveX Data Objects).

Sekilas Tentang ADO
Teknologi yang dikembangkan oleh Microsoft ini yang memungkinkan aplikasi ASP yang kita buat untuk berkomunikasi dengan database. ADO adalah sekumpulan objek yang menyediakan mekanisme untuk mengakses informasi dari sumber data (database) yang ODBC-compliant.
ADO memungkinkan suatu aplikasi untuk mengakses dan memanipulasi data di suatu server database dengan metode yang sama walaupun database yang digunakan berasal dari vendor yang berbeda. Umumnya untuk mengakses dan memanipulasi database langkah-langkah yang dilakukan adalah sebagai berikut:
• menghubungkan aplikasi/skrip dengan database;
• mengakses data atau melakukan perubahan data;
• menampilkan hasil dari manipulasi data;
• menutup objek untuk membebaskan memori.
Menghubungkan Aplikasi/Skrip Dengan Database
Mula-mula kita harus membuat objek Connection yang akan menjadi penghubung antara aplikasi dengan database. Ada 2 cara untuk membuat objek Connection ini, pertama dengan menggunakan DSN (Data Source Name), dan yang kedua dengan menggunakan DSN-less Connection. Cara kedua lebih banyak digunakan dengan berbagai pertimbangan. Salah satu artikel di www.4guysfromrolla.com menyebutkan bahwa DSN-less Connection lebih baik kinerjanya dari segi kecepatan proses, walaupun pengujian dilakukan dengan menggunakan IIS di server Windows NT. Pada umumnya perusahaan webhosting merekomendasikan DSN-less Connection karena akan mengurangi ketergantungan klien kepada administrator serta menghindari kerumitan yang terjadi jika server database dipindahkan.
Berikut adalah daftar parameter string DSN-less Connection untuk melakukan koneksi atau membuat objek Connection untuk beberapa jenis database yang didukung oleh Chili!Soft ASP:
DB2
Untuk format database ini Chili!Soft ASP di Linux tidak menyediakan DSN-less Connection, sehingga harus menggunakan System DSN.
dBase 5
strConn = "Driver={dBase}; DBQ=[direktori_database]; defaultDir=
+[direktori_default]"
di mana [direktori_database] adalah lokasi absolut dari direktori tempat database berada, [direktori_default] adalah direktori default tempat database berada.
Informix 7, 9
strConn = "Driver={Informix}; Server=[nama_server]; Database=[nama_database]; +UID=[username]; PWD=[password]"
di mana [nama_server] adalah nama dari server database, [nama_database] adalah nama database, [username] dan [password] adalah username dan password yang digunakan untuk mengakses database.
Microsoft Access
Untuk format database ini Chili!Soft ASP di Linux tidak menyediakan DSN-less Connection, sehingga harus menggunakan System DSN.
Microsoft SQL Server 6.5
Untuk format database ini Chili!Soft ASP di Linux tidak menyediakan DSN-less Connection, sehingga harus menggunakan System DSN.
Microsoft SQL Server 7.0
strConn = "Driver={SQL Server}; Server=[nama_server]; Database=
+[nama_database]; UID=[username]; PWD=[password]"
di mana [nama_server] adalah nama dari server database, [nama_database] adalah nama database, [username] dan [password] adalah username dan password yang digunakan untuk mengakses database.
Perhatian! Sebelum Anda mereferensikan Microsoft SQL Server 7.0 untuk DSN-less Connection, Anda harus meminta kepada Administrator Web hosting Anda agar mengedit template untuk Microsoft SQL Server. Penjelasan lebih menditel silakan lihat di dokumentasi Chili!Soft ASP.
MySQL
strConn = "Driver={MySQL}; Server=[nama_server]; Database=
+[nama_database]; UID=[username]; PWD=[password]"
di mana [nama_server] adalah nama dari server database, [nama_database] adalah nama database, [username] dan [password] adalah username dan password yang digunakan untuk mengakses database.
Oracle 7
strConn = "Driver={Oracle7}; Server=[nama_TNS]; UID=[username]; PWD=[password]"
di mana [nama_TNS] adalah nama TNS yang didefinisikan di dalam file tnsnames.ora, [nama_database] adalah nama database, [username] dan [password] adalah username dan password yang digunakan untuk mengakses database.
Oracle 8, 8I
strConn = "Driver={Oracle8}; Server=[nama_TNS]; UID=[username]; PWD=[password]"
di mana [nama_TNS] adalah nama TNS yang didefinisikan di dalam file tnsnames.ora, [nama_database] adalah nama database, [username] dan [password] adalah username dan password yang digunakan untuk mengakses database.
PostgreSQL
strConn = "Driver={Postgres}; Server=[nama_server]; UID=[username];
+PWD=[password]"
di mana [nama_server] adalah nama dari server database, [username] dan [password] adalah username dan password yang digunakan untuk mengakses database.
Sybase II
strConn = "Driver={Sybase}; Server=[nama_server]; Database=[nama_database];
+UID=[username]; PWD=[password]"
di mana [nama_server] adalah nama dari server database, [nama_database] adalah nama database, [username] dan [password] adalah username dan password yang digunakan untuk mengakses database.
Setelah membuat string yang diperlukan, langkah berikut adalah membuat instan objek Connection dan menjalankan metode Open() dengan parameter string strConn yang kita buat di atas, sebagai berikut:
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConn
Mengakses Data
Akses data ini saya bagi dua bagian, hanya untuk menampilkan data dari database, misalnya perintah SELECT dan melakukan perubahan data di database, misalnya perintah INSERT, UPDATE dan DELETE. Untuk mengakses data dapat dilakukan dengan dua cara yang umum digunakan.
Cara pertama adalah dengan langsung menggunakan metode Execute() seperti contoh berikut:
strSQL = "SELECT * FROM nama_table"
Set objRS = objConn.Execute(strSQL)
Kode di bawah menunjukkan contoh penggunaan metode Open() yang ada di objek Recordset untuk mengakses data.
Set objRS = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM nama_table"
objRS.Open strSQL, objConn
Cara pertama sama dengan mekanisme pada cara kedua yang akan mengisi objek Recordset dengan data hasil query. Tapi perlu diingat jika Anda menggunakan database MySQL atau PostgreSQL yang tidak mendukung Updatable Cursor, Anda tidak dapat mendefinisikan properti CursorType & CursorLocation, sehingga objek Recordset Anda sifatnya read-only dan data di dalamnya tidak dapat diubah. Dengan demikian Anda tidak dapat menggunakan metode AddNew(), Update() dan Delete() dari objek Recordset.
Melakukan Perubahan Data
Perubahan data yang dilakukan umumnya dapat untuk menambah data baru, mengubah data yang ada ataupun menghapus data dari database. Untuk melakukan perubahan data melalui ADO cara yang umum dilakukan seperti pada tiga contoh berikut, yaitu dengan menggunakan metode Execute() dari objek Connection seperti contoh untuk mengakses data di atas.
strSQL = "INSERT INTO nama_tabel VALUES (123, 'Erwin Kodiat', 'Web Developer')"
objConn.Execute(strSQL)
atau
strSQL = "UPDATE nama_tabel SET Nomer = 123, Nama = 'Erwin Kodiat',
+Pekerjaan = 'Web Developer'"
objConn.Execute(strSQL)
atau
strSQL = "DELETE FROM nama_tabel WHERE Nomer = 123"
objConn.Execute(strSQL)
Ketiga mekanisme yang ditunjukkan ini tidak mengembalikan objek Recordset sehingga sesudah mengeksekusi kode di atas tidak dapat memanggil objRS.Close().
Menampilkan Hasil dari Mengakses Data
Pada saat kita melakukan perintah SELECT tentunya pada akhirnya kita ingin menampilkan data, misalnya dalam sebuah tabel HTML. Untuk menampilkan data dari objek Recordset, kita harus melakukan iterasi. Cara yang umum digunakan untuk mengiterasi objek Recordset adalah dengan menggunakan loop do…while. Dalam menggunakan loop do…while, perlu diingat untuk membatasi loop dilakukan dengan memeriksa apakah data sudah mencapai EOF. Untuk mudahnya lihat contoh berikut yang akan menampilkan isi dari objek Recordset dalam format tabel HTML.
Response.Write ""
Do While Not objRS.EOF
Response.Write ""
Response.Write ""
Response.Write ""
Response.Write ""
Response.Write ""
objRS.MoveNext
Loop
Response.Write "
" & objRS("Nomer") & "" & objRS("Nama") & "" & objRS("Pekerjaan") & "
"
Objek Recordset menyediakan metode yang dapat digunakan menampilkan data di dalam objek Recordset tanpa harus melakukan iterasi, yaitu metode getRows() dan getString(). Saat ini Chili!Soft ASP tidak mendukung metode getString(). Menurut Charles Carrol (www.learnasp.com) dengan menggunakan metode getRows() akan mengurangi beban server dan akan meningkatkan kecepatan proses. Metode getRows() akan mengembalikan data di dalam objek Recordset dalam bentuk array. Kode berikut ini memberikan contoh menunjukkan penggunaan metode getRows():
Response.Write ""
Response.Write ""
For Each nama_field in objRS.Fields
Response.Write ""
Next
Response.Write ""
arrData = objRS.getRows()
jmlKolom = UBound(arrData, 1)
jmlBaris = UBound(arrData, 2)
For i = 0 to jmlBaris
Response.Write ""
For j = 0 to jmlKolom
Response.Write ""
Next
Response.Write ""
Next
Response.Write "
" & nama_field.name & "
" & arrData(j, i) & "
"
Artikel yang menjelaskan tentang metode GetRows() dan pembahasannya dapat dilihat di www.learnasp.com/learn/dbtablegetrows.asp.
Menutup Objek untuk Membebaskan Memori
Setiap kali kita mengakhiri skrip ataupun tidak akan menggunakan objek-objek ADO di skrip ASP, sebaiknya kita selalu menutup objek tersebut untuk membebaskan memori agar dapat dipakai lagi. Caranya sangat mudah, tinggal menggunakan metode Close() dan set objek tersebut menjadi Nothing seperti pada contoh berikut.
objRS.Close
Set objRS = Nothing ‘Lihat catatan di bawah
objConn.Close
Set objConn = Nothing
Anda boleh menutup objek Recordset (objRS.Close) hanya jika hasil dari eksekusi perintah SELECT dengan metode objRS.open, jika Anda melakukannya setelah melakukan perintah INSERT, UPDATE atau DELETE yang menggunakan objConn.execute(strSQL) akan timbul pesan error.
Gabungkan Semuanya
Untuk memberikan gambaran yang lebih baik, lihat dua buah contoh berikut. Contoh pertama untuk mengakses data, sedangkan contoh kedua untuk melakukan perubahan pada data. Perbedaan utama adalah pada contoh pertama ada kode yang digunakan untuk menampilkan data sedangkan pada contoh kedua karena objek Recordset yang dihasilkan dalam keadaan tertutup maka kita tidak dapat menampilkan data. Perhatikan juga pemanggilan kode objRS.Close yang tidak ditampilkan pada contoh kedua, karena proses perubahan data akan menghasilkan objek Recordset yang dalam keadaan tertutup.
Contoh pertama:
strConn = "Driver={MySQL}; Server=[nama_server]; Database=
+[nama_database]; UID=[username]; PWD=[password]"

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConn
strSQL = "SELECT * FROM nama_table"
Set objRS = objConn.Execute(strSQL)
Response.Write ""
Do While Not objRS.EOF
Response.Write ""
Response.Write ""
Response.Write ""
Response.Write ""
Response.Write ""
objRS.MoveNext
Loop
Response.Write "
" & objRS("Nomer") & "" & objRS("Nama") & "" & objRS("Pekerjaan") & "
"
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
Contoh kedua:
strConn = "Driver={MySQL}; Server=[nama_server]; Database=
+[nama_database]; UID=[username]; PWD=[password]"
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConn
strSQL = "INSERT INTO nama_tabel VALUES (123, ‘Erwin Kodiat’, ’Web Developer’)"
objConn.Execute(strSQL)
objConn.Close
Set objConn = Nothing Kirim Email dari Aplikasi
Aplikasi ASP yang kita buat pada umumnya memerlukan fasilitas untuk mengirim email dari aplikasi. Untuk mengirim email dari aplikasi ASP sebenarnya kita cukup menggunakan komponen COM Chili!Mail (SMTP). Sayangnya, Chili!Soft memisahkan komponen ini ke dalam paket terpisah, SpicePack, bersama komponen-komponen lain yang sangat dibutuhkan juga seperti: Chili!POP3 dan Chili!Upload. SpicePack ini harus dibeli lagi secara terpisah. Celakanya, karena pertimbangan bisnis banyak perusahaan webhosting yang belum mau menginvestasikan uangnya untuk membeli paket ini. Sehingga kita akan mengalami sedikit kesulitan dalam membuat aplikasi yang membutuhkan fasilitas pengiriman email.
Salah satu solusinya adalah dengan memodifikasi aplikasi Anda dengan memisahkan halaman yang mengirimkan email menjadi halaman tersendiri dan membuatnya dalam bahasa yang sudah didukung oleh server Linux pada umumnya seperti Perl, PHP, atau Python.
Solusi yang lain, seperti yang pernah diusulkan Steven Haryanto (steven.haryan.to), adalah dengan menggunakan suatu mekanisme yang ditawarkan oleh salah satu artikel bertajuk Send E-Mail via ASP without CDONTS (www.freevbcode.com/ShowCode.asp?ID=390). Pada dasarnya mekanisme ini sederhana dan cukup baik kinerjanya. Kita membuat sebuah file teks dari skrip kita lalu disimpan ke suatu direktori. Sebuah daemon akan mengunjungi direktori tersebut secara periodik dalam interval waktu tertentu dan memeriksa apakah ada file email di dalamnya, jika ada daemon tersebut akan langsung mengirimkan email tersebut. Kelemahan dari sistem ini adalah kita tidak dapat secara langsung mengirimkan email pada saat skrip dieksekusi. Tetapi, secara umum sistem ini masih dapat diterima untuk aplikasi yang tidak memerlukan fasilitas pengiriman email langsung pada saat skrip dieksekusi.
Kesimpulan
Dengan memigrasi aplikasi ASP dari IIS yang berjalan di server berbasis Windows NT ke Linux akan mengurangi investasi yang harus dilakukan, mengingat pada umumnya biaya Web hosting dengan server berbasis Linux ini relatif lebih murah. Di samping itu kinerja dari server berbasis Linux sudah terbukti dengan banyaknya webserver di dunia yang menggunakan Linux sebagai sistem operasinya. Ditambah lagi dengan bantuan Chili!Soft ASP yang menyederhanakan proses migrasi aplikasi ASP yang sudah berjalan di Windows NT ke server berbasis Linux.
Literatur
• Chili!Soft ASP 3.6 Product Documentation
• Chili!Soft ASP 3.6 White Paper
• MySQL Reference Manual
• MSDN Online (msdn.microsoft.com)
• 4guysfromrolla (www.4guysfromrolla.com)
• LearnASP by Charles Carrol (www.learnsasp.com)
• FreeVBCode (www.freevbcode.com)

Tidak ada komentar:

Posting Komentar