Rabu, 12 Desember 2007

Muhammad II Al-Fatih: Sang Penakluk Konstantinopel

Abu Qubail menuturkan dari Abdullah bin Amr bin Ash, “Suatu ketika kami sedang menulis di sisi Rasulullah SAW, tiba-tiba beliau ditanya, “Mana yang terkalahkan lebih dahulu, Konstantinopel atau Romawi?” Beliau menjawab, “Kota Heraklius-lah yang akan terkalahkan lebih dulu.” Maksudnya adalah Konstantinopel.” [H.R. Ahmad, Ad-Darimi, Al-Hakim]

“Kota Konstantinopel akan jatuh ke tangan Islam. Pemimpin yang menaklukkannya adalah sebaik-baik pemimpin dan pasukan yang berada di bawah komandonya adalah sebaik-baik pasukan.” [H.R. Ahmad bin Hanbal Al-Musnad 4/335]

Jika anda terkagum-kagum dengan penggambaran perang yang ketat antara Balian of Ibelin melawan Shalahudin Al-Ayyubi di film Kingdom of Heaven [resensi Priyadi], maka perang antara Constantine XI Paleologus dengan Muhammad Al-Fatih jauh lebih ketat, tidak hanya dalam hitungan hari tapi berminggu-minggu.

Sultan Muhammad II atau Mehmed Al-Fatih

Kekaisaran Romawi terpecah dua, Katholik Roma di Vatikan dan Yunani Orthodoks di Byzantium atau Constantinople yang kini menjadi Istanbul. Perpecahan tersebut sebagai akibat konflik gereja meskipun dunia masih tetap mengakui keduanya sebagai pusat peradaban. Constantine The Great memilih kota di selat Bosphorus tersebut sebagai ibukota, dengan alasan strategis di batas Eropa dan Asia, baik di darat sebagai salah satu Jalur Sutera maupun di laut antara Laut Tengah dengan Laut Hitam dan dianggap sebagai titik terbaik sebagai pusat kebudayaan dunia, setidaknya pada kondisi geopolitik saat itu.

Yang mengincar kota ini untuk dikuasai termasuk bangsa Gothik, Avars, Persia, Bulgar, Rusia, Khazar, Arab-Muslim dan Pasukan Salib meskipun misi awalnya adalah menguasai Jerusalem. Arab-Muslim terdorong ingin menguasai Byzantium tidak hanya karena nilai strategisnya, tapi juga atas kepercayaan kepada ramalan Rasulullah SAW melalui riwayat Hadits di atas.

Wilayah Konstantinopel

Upaya pertama dilakukan oleh Muawiyah bin Abu Sufyan pada tahun 668M, namun gagal dan salah satu sahabat Rasulullah SAW yaitu Abu Ayyub Al-Anshari ra. gugur. Sebelumnya Abu Ayyub sempat berwasiat jika ia wafat meminta dimakamkan di titik terjauh yang bisa dicapai oleh kaum muslim. Dan para sahabatnya berhasil menyelinap dan memakamkan beliau persis di sisi tembok benteng Konstantinopel di wilayah Golden Horn.

Generasi berikutnya, baik dari Bani Umayyah dan Bani Abbasiyyah hingga Turki Utsmani pada masa pemerintahan Murad II juga gagal menaklukkan Byzantium. Salah satu peperangan Murad II di wilayah Balkan adalah melawan Vlad Dracul, seorang tokoh Crusader yang bengis dan sadis (Dracula karya Bram Stoker adalah terinsipirasi dari tokoh ini). Selama 800 tahun kegagalan selalu terjadi, hingga anak Sultan Murad II yaitu Muhammad II naik tahta Turki Utsmani.

Sejak Sultan Murad I, Turki Utsmani dibangun dengan kemiliteran yang canggih, salah satunya adalah dengan dibentuknya pasukan khusus yang disebut Yanisari. Dengan pasukan militernya Turki Utsmani menguasasi sekeliling Byzantium hingga Constantine merasa terancam, walaupun benteng yang melindungi –bahkan dua lapis– seluruh kota sangat sulit ditembus, Constantine pun meminta bantuan ke Roma, namun konflik gereja yang terjadi tidak menelurkan banyak bala bantuan.

Constantine XI Paleologus

Hari Jumat, 6 April 1453M, Muhammad II atau disebut juga Mehmed bersama gurunya, syaikh Aaq Syamsudin, beserta tangan kanannya, Halil Pasha dan Zaghanos Pasha merencanakan penyerangan ke Byzantium dari berbagai penjuru benteng kota tersebut. Dengan berbekal 150.000 ribu pasukan dan meriam buatan Urban –teknologi baru pada saat itu– Muhammad II mengirim surat kepada Paleologus untuk masuk Islam atau menyerahkan penguasaan kota secara damai atau perang. Constantine Paleologus menjawab tetap mempertahankan kota dengan dibantu oleh Kardinal Isidor, Pangeran Orkhan dan Giovanni Giustiniani dari Genoa.

Kota dengan benteng 10m-an tersebut memang sulit ditembus, selain di sisi luar benteng pun dilindungi oleh parit 7m. Dari sebelah barat melalui pasukan altileri harus membobol benteng dua lapis, dari arah selatan laut Marmara pasukan laut harus berhadapan dengan pelaut Genoa pimpinan Giustiniani dan dari arah timur armada laut harus masuk ke selat sempit Golden Horn yang sudah dilindungi dengan rantai besar hingga kapal perang ukuran kecil pun tak bisa lewat.

Berhari-hari hingga berminggu-minggu benteng Byzantium tak bisa jebol, kalaupun runtuh membuat celah pasukan Constantine mampu mempertahankan celah tersebut dan dengan cepat menumpuk kembali hingga tertutup. Usaha lain pun dicoba dengan menggali terowongan di bawah benteng, cukup menimbulkan kepanikan kota, namun juga gagal. Hingga akhirnya sebuah ide yang terdengar bodoh dilakukan hanya dalam semalam. Salah satu pertahanan yang agak lemah adalah melalui selat Golden Horn yang sudah dirantai. Ide tersebut akhirnya dilakukan, yaitu memindahkan kapal-kapal melalui darat untuk menghindari rantai penghalang, hanya dalam semalam dan 70-an kapal bisa memasuki wilayah selat Golden Horn.

29 Mei, setelah sehari istirahat perang Muhammad II kembali menyerang total, diiringi hujan dengan tiga lapis pasukan, irregular di lapis pertama, Anatolian Army di lapis kedua dan terakhir pasukan Yanisari. Giustiniani sudah menyarankan Constantine untuk mundur atau menyerah tapi Constantine tetap konsisten hingga gugur di peperangan. Kabarnya Constantine melepas baju perang kerajaannya dan bertempur bersama pasukan biasa hingga tak pernah ditemukan jasadnya. Giustiniani sendiri meninggalkan kota dengan pasukan Genoa-nya. Kardinal Isidor sendiri lolos dengan menyamar sebagai budak melalui Galata, dan Pangeran Orkhan gugur di peperangan.

Konstantinopel telah jatuh, penduduk kota berbondong-bondong berkumpul di Hagia Sophia, dan Sultan Muhammad II memberi perlindungan kepada semua penduduk, siapapun, baik Islam, Yahudi ataupun Kristen. Hagia Sophia pun akhirnya dijadikan masjid dan gereja-gereja lain tetap sebagaimana fungsinya bagi penganutnya.

Toleransi tetap ditegakkan, siapa pun boleh tinggal dan mencari nafkah di kota tersebut. Sultan kemudian membangun kembali kota, membangun sekolah –terutama sekolah untuk kepentingan administratif kota– secara gratis, siapa pun boleh belajar, tak ada perbedaan terhadap agama, membangun pasar, membangun perumahan, bahkan rumah diberikan gratis kepada para pendatang yang bersedia tinggal dan mencari nafkah di reruntuhan kota Byzantium tersebut. Hingga akhirnya kota tersebut diubah menjadi Istanbul, dan pencarian makam Abu Ayyub dilakukan hingga ditemukan dan dilestarikan.

Dan kini Hagia Sophia yang megah berubah fungsi menjadi museum.

Sumber: Alwi Alatas: Al-Fatih Sang Penakluk Konstantinopel, Penerbit Zikrul Hakim, 2005

Selasa, 11 Desember 2007

Meneliti Abu Joan d’Arc,Benarkah Pahlawan Prancis Itu Dibakar Tiga Kali?

Paris – Bagi warga Prancis, nama Joan d’Arc tidak asing lagi. Perempuan pahlawan abad ke-15 yang mati dibakar pada usia 19 tahun itu merupakan simbol kebangkitan bangsa Prancis. Kini, para ahli tengah menyelidiki abu yang dianggap berasal dari tubuhnya.
Sisa-sisa tubuh jenazah dilaporkan berhasil dikumpulkan dari onggokan kayu bakar di mana Joan d’Arc dibakar hidup-hidup. Temuan itu muncul hampir 600 tahun setelah abunya diyakini telah dibuang ke Sungai Seine.
Sebuah tim yang terdiri atas 18 pakar berencana melakukan serangkaian tes terhadap pecahan tulang dan jaringan kulit yang diduga berasal dari tubuh d’Arc.
Philippe Charlier, pakar forensik yang turut dalam penelitian itu, menyatakan analisis tersebut dapat memakan waktu enam bulan. Ia menambahkan penelitian itu tidak dapat memastikan bahwa bagian tubuh tersebut benar-benar milik Joan d’Arc, karena tidak ada sampel DNA yang dapat menjadi perbandingan. Namun, dari penelitian dapat diketahui jika tulang-tulang itu bukan berasal dari tubuh d’Arc.

Dibakar Tiga Kali
Dengan mengkaji susunan molekuler dan biokimia, tim berharap dapat menentukan secara tepat tahun dan keaslian sisa abu itu. Kombinasi teknik penentuan masa karbon dan analisis tentang jejak abu akan memungkinkan tim pakar menentukan usia abu hingga pada tahun dan bulan secara akurat.
Selain itu, bisa pula ditemukan fakta baru tentang pahlawan perempuan yang membantu Prancis memukul mundur pasukan Inggris di akhir Perang Seratus Tahun (1337-1453).
Menurut Charlier, d’Arc sebenarnya dibakar tiga kali pada 30 Mei 1431, menyusul persidangannya di Rouen, Normandia. Pada pembakaran pertama, d’Arc meninggal dunia karena terlalu banyak menghirup asap. Saat dibakar untuk kedua kalinya organ-organ dalamnya tidak semuanya terbakar. Dan pada pembakaran ketiga, tidak ada yang tersisa kecuali abunya.
Tulang iga sepanjang 15 sentimeter dan dibungkus dengan zat kimia berwarna hitam, disimpan dengan baik, kata Charlier. Ia menyatakan pertama-tama timnya akan melakukan uji DNA untuk menentukan jenis kelaminnya. Lalu mereka akan melanjutkan tes untuk menentukan usia tulang tersebut. Uji perbandingan DNA tidak dapat dilakukan karena garis keturunan Joan d’Arc kemungkinan salah, kata Charlier.
“Kami akan dapat menyatakan: Ini adalah abu seorang wanita yang tewas di Rouen (Prancis utara), berusia 19 tahun, yang meninggal dunia pada 1431 sekitar 30 Mei dan yang dibakar tiga kali pada hari yang sama,” ujar Charlier. Jika semua itu dapat dikonfirmasi, katanya, “Kita akan tahu dengan hampir pasti bahwa ini betul-betul Joan d’Arc.”

Mandat Tuhan
Dilahirkan di sebuah keluarga sederhana di Prancis Timur, Joan d’Arc menyatakan mendengar suara Tuhan dan mendapat mandatnya untuk mengusir Inggris keluar dari Prancis. D’Arc ditangkap tahun 1430 dan diadili dengan tuduhan menyebarkan klenik dan ilmu gaib setelah membawa kemenangan Prancis dalam beberapa pertempuran dalam Perang Seratus Tahun. Yang paling terkenal adalah pertempuran di Orleans, sebelah selatan Paris.
Gadis muda asal Lorraine yang sering menyamar sebagai pria dalam pertempuran itu pun dibakar di tiang pembakaran di Rouen, 30 Mei 1431. Dia dinyatakan tidak bersalah 7 Juli 1456 dan didaftarkan sebagai calon orang suci pada 11 April 1909. Joan d’Arc diangkat menjadi santa oleh Gereja Katolik pada 16 Mei 1920.
Kisah luar biasa yang dialami Joan d’Arc telah menjadi sumber ilham bagi para penulis Prancis, mulai dari Voltaire hingga pengarang masa kini.
Pernyataannya tentang ilham Ilahi dan keberhasilannya memukul mundur pasukan penyerbu Inggris, membuat dirinya sebagai simbol yang kuat kebangkitan bangsa Prancis.
Dia kemudian menjadi inspirasi mistis bagi para nasionalis Katolik Prancis dan telah digunakan secara kontroversial sebagai emblem Partai Front Nasional ekstrem kanan pimpinan Jean-Marie Le Pen, yang memperingati kematiannya setiap tahun.
Namun begitu, Charlier menegaskan dirinya didorong oleh rasa keingintahuan ilmiah belaka dan tak terpengaruh dengan “perdebatan” soal warisan yang ditinggalkan Joan d’Arc.
“Tak ada tujuan nasionalistis di belakang proyek ini, tak ada aspek keagamaan dan politis. Proyek ini betul-betul ilmiah dan investigasi sejarah,” katanya.
Abu Joan d’Arc, yang kini berada di bawah pengawasan sebuah asosiasi sejarah Prancis dan sekarang menjadi milik Gereja Katolik Roma di Tours, barat daya Prancis, merupakan satu-satunya jejak yang tersisa dari pahlawan perempuan itu.
Charlier sebelumnya mencatat keberhasilan mengidentifikasi penyebab kematian Agnes Sorel, wanita simpanan Raja Charles VII yakni keracunan mercuri. Namun, dia tidak mampu memastikan apakah peristiwa itu merupakan pembunuhan.
(ap/ant/afp/nat)

Joan d’Arc ,Satria Wanita Pelindung Negara Perancis



Joan adalah anak bungsu dari 5 bersaudara pasangan Jacques dan Issabelle d’Arcyang lahir di sebuah desa di Domremy pada tanggal 6 Januari 1412. Sejak kecil Joan sudah menunjukkan sikap yang begitu saleh terhadap masyarakat di sekitarnya. Ibunya begitu telaten mengajarkan kepadanya doa-doa seperti Bapa Kami, Salam Maria dan juga Credo.

Pada usia 13 tahun ia merasakan dorongan batin yang begitu kuat, ia mendengar ‘suara-suara’ yang memanggilnya agar selalu berbuat baik dan sering-sering mengunjungi gereja, dengan demikian ia akan selalu mendapatkan pertolongan Tuhan. Ia yakin bahwa ‘suara-suara’ yang ia dengar setiap hari itu adalah suara Tuhan melalui St. Mikael Sang Malaikat Agung, Sta. Katarina dan Sta. Margareta. Satu hari ‘suara-suara’ tadi mengatakan agar Joan menyelamatkan negara Perancis yang pada saat itu hampir seluruh wilayahnya dikuasai oleh pasukan Inggris dan Burgundi. Joan juga harus menghantarkan putera mahkota kerajaan Perancis yang bernama Charles untuk segera mengenakan mahkota sebagai raja Perancis dan mengusir tentara Inggris dari tanah Perancis.

23 Pebruari 1429 Joan menemui gubernur Sir Robert de Baudricort yang pro Perancis di kota Vaucoulers. Joan menceritakan ‘suara-suara’ yang didengarnya dan menyatakan keinginannya untuk bertemu dengan putra mahkota Charles di Chinon. Setelah ditolak beberapa kali akhirnya Joan diijinkan untuk bertemu dengan sang putra mahkota.

Tidak gampang meyakinkan putra mahkota, terlebih-lebih pada saat kekuasaan gereja yang begitu besar pada saat itu. Setelah melalui penyidikan yang dilakukan oleh para pejabat gereja yang dipimpin oleh uskup agung Reims, Joan dijinkan untuk memimpin tentara Perancis. 29 April ia dan bala tentaranya memasuki kota Orleans. Ia berhasil memporak-porandakan kubu pertahanan tentara Inggris di Orleans pada tanggal 8 Mei. Tanggal 9 Juni, ia dan pasukannya memasuki lembah Loire, tanggal 19 Juni ia berhasil memukul mundur dan memaksa pasukan Inggris keluar dari lembah Loire.

Joan mendesak kepada pejabat kerajaan dan pejabat gereja untuk memahkotai putra mahkota secepatnya. Tanggal 17 Juli 1429, Charles dimahkotai dan resmi menjadi Raja Perancis.

Dengan alasan yang hanya diketahui oleh Raja Charles sendiri, sejak menjadi Raja ia tidak lagi mendengarkan nasihat maupun pendapat Joan. Kekuasaan telah membuat gelap mata raja muda ini, ditambah lagi dengan kekuasaan gereja yang mendominasi di lingkungan kerajaan.

Joan mendapatkan bisikan bahwa waktunya hanya tinggal satu tahun lagi untuk membantu Perancis melepaskan diri dari tangan Inggris. Hal ini juga sudah disampaikannya kepada Raja Charles, tetapi tetap saja Raja Charles tidak mengindahkannya. Hampir satu tahun Joan meyakinkan Raja Charles mengenai hal ini. Di tengah kebimbangan dan rasa frutrasi, Joan menjalankan misinya sendiri. 23 Mei 1430, Joan tertangkap di kota Compiegne, ia dikhianati oleh tentara Burgundia. Raja Charles yang mendengar kabar ditangkapnya Joan, tidak melakukan tindakan apa-apa. Joan dibiarkannya begitu saja. Sebagai tahanan di sana ia diperlakukan dengan baik, tetapi tanggal 21 November 1430 ia dipindahtangankan ke tentara Inggris. Di sanalah Joan merasakan siksaan-siksaan baik fisik dan psikis. Bagaimana Joan dapat bertahan dari siksaan itu semua adalah sebuah mukjizat bagi dirinya.

Pihak tentara Inggris begitu ingin membunuhnya, tetapi juga ingin mendiskreditkan Raja Charles melalui tangan gereja lewat uskup Cauchon dengan menyebarkan isu bahwa Joan adalah seorang ahli sihir dan seorang yang anti gereja.

Joan dibawa ke pengadilan uskup Beauviais dengan tuduhan pokok praktik sihir dan takhayul sebanyak 15 kali. Joan membela diri dan secara gemilang mendebat para penuntut-penuntutnya yang kebanyakan adalah kaum cendekiawan. Ia selalu menolak tuntutan untuk mengungkapkan ‘suara-suara’ yang didengarnya. Akhirnya Joan dinyatakan bersalah. Joan terkesiap dalam hati kecilnya ia merasa begitu takut akan hukuman bakar yang akan diterimanya.

Di dalam kamar tahanan ia berlutut sambil menangis memanggil-manggil para orang kudus yang membisikkan telinganya selama ini. Ia memanggil-manggil St. Mikael, Sta. Katarina dan Sta. Margareta, namun Joan tidak mendengar apa-apa, tidak ada satu jawaban ataupun bisikan di telinganya. Ia merasa takut yang amat sangat karena merasa ditinggalkan oleh Tuhannya. Namun entah darimana asalnya, rasa takut tadi berangsur-angsur hilang berganti dengan rasa keberanian yang begitu besar. Joan kembali menemukan kepercayaan dan keyakinannya lagi.

Malam sebelum Joan dibakar, dengan rasa ingin tahu yang besar dan juga kebimbangan uskup Beauvais mengunjunginya. Ia bertanya kepada Joan mengenai misteri ‘suara-suara’ yang dialami Joan. Uskup Beauvais sangat terperanjat dengan salah satu jawaban Joan, dengan lugu Joan mengatakan begitu jelas sosok St. Mikael. Beauvais menyadari bahwa apa yang dialami Joan lewat ‘suara-suara’ misteriusnya adalah suatu kebenaran bukan rekayasa Joan sendiri. Karena dokumen gereja mengenai Sang Malaikat Agung St. Mikael hanya ada di vatikan dan hanya pejabat vatikan tingkat tinggi saja yang mengetahuinya, sedang Joan sendiri adalah seorang wanita dari desa yang seumur-umur belum pernah ke Vatikan apalagi mengetahui dokumen tersebut.

30 Mei 1431 Joan dibakar hidup-hidup di alun-alun di Rouen. Joan menemui ajalnya melalui keputusan palsu pengadilan gereja yang tanpa malu-malu menjual kebenaran untuk tujuan politik Inggris.

Beberapa tahun kemudian, demi mempertahankan kedudukannya, Raja Charles berusaha dua kali membuktikan bahwa keputusan pengadilan itu tidak sah. Dua puluh lima tahun kemudian, Paus Kalistus III menunjuk suatu komisi untuk melakukan penyidikan atas keputusan pengadilan tersebut. Akhirnya dinyatakan melalui pengadilan gereja juga, bahwa keputusan itu dicapai atas dasar tipu daya belaka.

Tahun 1920, Joan dinyatakan kudus oleh Roma, bukan karena patriotisme atau keberaniannya di medan peperangan selama memimpin bala tentara Perancis, melainkan karena kesalehan hidup dan kesetiaannya dalam memenuhi apa yang dikaruniakan Tuhan kepadanya. Perayaan Santa Joan d’Arc ini dirayakan pada tiap-tiap tanggal 30 Mei.

salut buat joan of arc,tidak lupa salut juga buat ibukita kartini
Dari: Warta Mikael - http://www.wartamikael.org

Senin, 10 Desember 2007

Pengenalan ADOdb 1.1

Pengenalan ADOdb 1.1 Latar Belakang

Sebelum memulai penjelasan tentang ADOdb, permulaan bab ini akan menjelaskan latar belakang mengapa ADOdb diciptakan. Selama ini mungkin Anda telah berpengalaman membuat aplikasi database dengan PHP, di mana Anda mungkin telah hafal fungsi-fungsi database untuk MySQL, atau fungsi PHP untuk database yang sering Anda gunakan. Tetapi apakah Anda menyadari bahwa apabila aplikasi database Anda yang telah menjadi produk jadi seringkali hanya dapat menggunakan database tertentu saja? Inilah yang menjadi landasan diciptakannya teknologi abstraksi layer database. Apabila aplikasi database yang Anda buat ditujukan untuk MySQL maka akan mengalami kesulitan bila aplikasi database tersebut karena sesuatu hal terpaksa harus menggunakan database lain, seperti PostgreSQL. Apakah yang dapat dilakukan? Anda harus mengganti semua fungsi database spesifik untuk MySQL dengan fungsi database untuk PostgreSQL. Tentu hal ini akan menjadi masalah apabila aplikasi yang telah dibuat merupakan aplikasi yang kompleks. Permasalahan ini dapat teratasi apabila aplikasi kita menambahkan layer abstraksi database.



Layer Abstraksi database dapat ditambahkan dengan menggunakan API atau library /pustaka tertentu. Library atau API ini didesain untuk dapat bekerja dengan berbagai macam database server dengan sintaks atau fungsi yang sama. Perbedaan yang ada hanya pada konfigurasi saja sehingga apabila terjadi perubahan database yang digunakan, kita hanya perlu menyesuaikan konfigurasi untuk database pada aplikasi. Tentu menyenangkan, bila kita menghasilkan aplikasi database yang portabel dalam arti dapat berjalan di berbagai macam database tanpa menulis ulang kode program yang ada. Ini meningkatkan nilai dan kualitas program aplikasi yang telah dibuat.

Ada banyak pilihan untuk melakukan abstraksi database karena kita dapat menggunakan beberapa library atau class yang sudah ada, dua di antaranya adalah Pear::DB, PHPLib dan ADOdb.

1.2 Mengenal ADOdb

ADOdb merupakan kependekan dari Active Data Objects Data Base. ADOdb merupakan sekelompok pustaka atau class-class yang melakukan standarisasi untuk fungsi database dengan pemrograman PHP. ADOdb merupakan salah satu pustaka yang dapat kita manfaatkan sebagai layer abstraksi database. Fungsi utamanya adalah untuk menyembunyikan perbedaan database dan memberikan method sederhana untuk melakukan kueri pada berbagai macam database dengan perubahan kode seminimal mungkin.

ADOdb terkenal karena kecepatannya, kemudahan penggunaannya serta kelengkapan fasilitasnya.

Informasi ADOdb selengkapnya dapat diperoleh di:

http://php.weblogs.com/adodb

1.3 Kelebihan ADOdb

Kelebihan ADOdb adalah:

1. Mudah dimengerti oleh programmer Windows karena sintaksnya hampir sama persis dengan Microsoft ADO

2. Cepat, juga memiliki ekstension native untuk mempercepat proses

3. Telah terbukti handal dalam berbagai aplikasi nyata

4. Memiliki fungsi atau pustaka yang lengkap

5. Menyediakan kode pendukung untuk menangani insert dan update yang dapat diadaptasi ke berbagai database secara cepat. method disediakan untuk penanganan tanggal, penggabungan string dan karakter tanda petik string untuk berbagai database

6. Mudah untuk digunakan pada database lain karena kode spesifik dari database tertentu diletakkan pada fungsi tersendiri sehingga Anda tidak perlu melakukan perubahan pada logik utama dari class.

7. Mendukung banyak sekali database server

8. Performance Monitoring dan tuning library

  1. Paging Library
  2. Library untuk Manajemen session berbasis database
1.4 Aplikasi nyata yang menggunakan ADOdb

ADOdb telah terbukti stabil, cepat dan populer karena telah banyak aplikasi PHP di dunia yang memanfaatkan ADOdb.

Aplikasi yang menggunakan ADOb antara lain:

1. PHPLens

http:// www.phplens.com

Merupakan komponen data grid komersial yang mengizinkan baik desainer web dan programmer profesional untuk membangun dan memelihara aplikasi database pada Web dengan mudah. Dibuat oleh pembuat ADOdb.

2. ECreasol

http://www.ecreasol.com

Content Management System dari Switzerland yang dibangun dengan PHP dan ADOdb.

3. PostNuke

http://www.postnuke.com

Open Source Portal Content Management System/Weblog yang sangat terkenal, mirip PHPNuke.

4. NOLA

http://nola.noguska.com

Aplikasi akuntansi, inventory dan aplikasi job tracking berbasis web, berlisensi GPL dan dibuat oleh Noguska

5. DBForm

http://dbform.sourceforge.net

Library atau framework yang memudahkan kita dalam bekerja dengan web form dan untuk proses update database yang umum serta mendayagunakan class dalam bekerja dengan tabel database.

6. Gallery

http://www.menalto.com/projects/gallery/modules.php?op=modload&name=News&file=index

Aplikasi galeri/album foto yang canggih

1.5 Perbandingan Pear DB dengan ADOdb 1.5.1 Perbandingan Fasilitas/API

Feature

PEAR DB

ADOdb

dukungan Data Source Name (DSN)

ya

ya, bila mode kompatibilitas dengan Pear diaktifkan

Error Handling

PEAR

Module penanganan error yang dapat dikembangkan. Dukungan terintegrasi untuk 3 penanganan error:

- PEAR style
- menggunakan error_log
- Ditampilkan ke layar

Koneksi ke database

DB::Connect()

ADOConnection::Connect()
ADOConnection::PConnect()
ADOConnection::NConnect()

Mengikuti konvensi standar koneksi dari PHP

Diskonek dari database

DB::Disconnect()

ADOConnection::Close()

Mengirimkan perintah SQL

DB::Query()

ADOConnection::Execute()

Identifikasi peringatan

DB::isWarning()

Peringatan dikirim ke fungsi ADOConnection::outp(), tetapi tidak dikirim ke Error Handler. Perilaku default dari outp() adalah mengeluarkan ke layar. Hal ini dapat dioverridden.

Identifikasi Error

DB::isError()

Error dikirimkan ke error handler

Quote strings

DB::quote()

ADOConnection::qstr()

Mendapatkan informasi dukungan backend untuk fasilitas tertentu

DB::provide()

Menyediakan properti dengan nilai true atau false pada objek ADOConnection. Biasanya dimulai dengan $has*.

Auto-insert atau update record

DB::autoPrepare()

ADOConnection::GetInsertSQL() atau
ADOConnection::GetUpdateSQL()

Menjalankan kueri prepare

DB::execute()

ADOConnection::Execute()

Menjalankan sejumlah kueri prepare berulangkali

DB::executeMultiple()

Memanggil ADOConnection::Execute() dalam loop for

Menghasilkan kueri limit ( eq. SELECT …

LIMIT … )

DB::limitQuery()

ADOConnection::SelectLimit()

Mendapatkan kolom pertama, baris pertama dari kueri

DB::getOne()

ADOConnection::GetOne()

Mendapatkan baris pertama dari kueri

DB::getRow()

ADOConnection::GetRow()

Mendapatkan kolom tunggal dari kueri dari array

DB::getCol()

ADOConnection::GetCol()

Mendapatkan result-set sebagai associative array menggunakan kolom pertama sebagai key

DB::getAssoc()

ADOConnection::GetAssoc()

Mengembalikan result set sebagai array 2 dimensi

DB::getAll()

ADOConnection::getAll() atau ADOConnection::GetArray()

Baris yang berubah dari insert/delete/update

DB::affectedRows()

ADOConnection::Affected_Rows()

Determine whether rows are fetched as indexed atau associative arrays, atau as objects

DB::setFetchMode()

Set the $ADODB_FETCH_MODE variable for indexed atau associative arrays. For fetching rows as objects, use ADOResultSet::FetchObject().

Get the next number in a sequence

DB::nextID()

ADOConnection::GenID() atau
ADOConnection::NextID()

Create a sequence

DB::createSequence()

Otomatis dibuat.

Tetapi pada ADOdb 2.60 Anda dapat membuat secara menual menggunakan:
ADOConnection::CreateSequence()

Drop a sequence

DB::dropSequence()

Tersedia pada ADOdb 2.60
ADOConnection::DropSequence()

Mendapatkan info DB internal

DB::getListOf()

tersedia sebagai properti ADOConnection

Mendapatkan baris berikutnya

DB_Result::fetchRow()

ADORecordSet::FetchRow() atau
ADORecordSet::MoveNext()

Mendapatkan baris ke variabel yang sudah ada.

Fetch the row into existing variable

DB_Result::fetchInto()

ADORecordSet::FetchRow()

Mendapatkan jumlah kolom yang didapat

DB_Result::numCols()

ADORecordSet::FieldCount()

Mendapatkan jumlah baris yang didapat

DB_Result::numRows()

ADORecordSet::RecordCount()

Mendapatkan result berikutnya bila batch kueri dijalankan

DB_Result::nextResult()

ADORecordSet::NextRecordSet()

Mendapatkan info tentang resultset

DB_Result::tableInfo()

ADORecordSet::FetchField()

Error object

DB_Error

Pear menyediakan mekanisme meta-error di mana semua error dipetakan ke daftar error virtual. Masalah dengan pendekatan ini adalah pesan error telah disederhanakan sehingga proses debug penyebab error sebenarnya lebih sulit.

Objek PEAR error didukung bila emulasi PEAR diaktifkan.

Secara umum, debugging pada ADOdb lebih mudah karena proeperti ADOConnection::debug. Apabila true, maka semua perintah SQL, pesan debug dan error dikeluarkan ke output standar. PEAR DB tidak memilikinya, sehingga Anda harus memiliki kerangkan debugging sendiri.

Objek warning

DB_Warning

Tidak diperlukan

1.5.2 Perbandingan kecepatan

Penulis menampilkan pengukuran dan perbandingan kecepatan ADOdb dengan teknologi terkait pada bagian ini. Sumber perbandingan kecepatan ini berasal dari

http://phplens.com/lens/adodb/

Perbandingan Kecepatan pertama

Anda dapat melihat pada perbandingan kecepatan antara fungsi MySQL native, ADOdb dengan ekstension native, dbx, ADOdb biasan, PHPlib, MDB, PEAR DB serta M’base.

Perbandingan kecepatan ini dilakukan dengan mendapatkan 82 baris dari tabel products sebanyak 200 kali. Tes diulang 5 kali. Waktu koneksi tidak diikutkan dari perbandingan kecepatan. Nilai yang lebih rendah lebih baik, semua angka di sini adalah dalam hitungan detik.

Perhatikan tabel hasil perbandingan kecepatan berikut:

MySQL 1.12 1.12 1.17 1.15 1.14

ADOdbext 1.30 1.31 1.29 1.30 1.32

dbx ext 1.35 1.38 1.41 1.37 1.36 (index only)

ADOdb 1.43 1.47 1.47 1.44 1.45

dbx ext 1.53 1.52 1.52 1.52 1.55 (index/assoc/info)

PhpLib 1.53 1.62 1.64 1.64 1.57

MDB 1.77 1.75 1.75 1.76 1.73

PEAR DB 2.91 2.90 2.85 2.83 2.84 (fetchInto)

PEAR DB 3.14 3.13 3.22 3.12 3.16 (fetchRow)

M'base 4.51 4.55 4.46 4.54 4.52 (numeric indexes)

M'base 4.99 4.72 4.71 4.71 4.72 (assoc indexes)

Rata-Rata Overhead

MySQL 1.14 -

ADOdbext 1.30 14%

dbx 1.37 20% (index only)

ADOdb 1.45 27%

dbx 1.53 34% (index/assoc/info)

PhpLib 1.60 40%

MDB 1.75 54%

PEAR DB 2.87 152% (fetchInto)

PEAR DB 3.15 176% (fetchRow)

M'base 2.52 296% (numeric cols)

M'base 4.77 318% (assoc cols)

Perbandingan Kecepatan dua

Perbandingan Kecepatan pertama adalah perbandingan sintetis yang tidak mengukur kecepatan secara nyata. Perbandingan kecepatan kedua diusahakan lebih realistik, dengan mengukur request HTTP / detik. Pada tes ini, kita memilih dan menampilkan 82 baris dari tabel products, sekali tiap request halaman.

Perbandingan Kecepatan ini menggunakan HTTP benchmarking tool, M’soft Web App Stress Tool (WAST). Pengukuran ini juga dengan Turk MMCache Accelarator 2.3.23 terinstall dan tanpa terinstall.

Dua tes dijalankan dan dirata-rata untuk tiap tes. Nilai yang lebih tinggi akan lebih baik. Semua pengukurang dalam halaman / detik.

Dengan Tanpa

Accelerator Accelerator

MySQL 83.53 81.35

ADOdb 61.19 21.33

PEAR DB 52.85 25.26

Informasi detail mengenai perbandingan dan pengukuran kecepatan ini dapat dilihat di url:

http://phplens.com/lens/adodb/#2

1.6 Database yang didukung oleh ADOdb

Tentu Anda perlu mengerti apa sajakah database yang didukung ADOdb sehingga Anda dapat memutuskan untuk menggunakan ADOdb atau tidak sesuai kebutuhan aplikasi.

Database yang didukung oleh ADOdb antara lain adalah:

1. MySQL

2. PostgreSQL

3. Oracle

4. Microsoft SQL Server

5. Sybase

6. Sybase SQL Anywhere

7. Informix

8. FrontBase

9. SQLite

10. Interbase (Firebird and Borland variants)

11. Foxpro

12. Access

13. DB2

14. SAP DB

15. ODBC

Dengan melihat daftar tersebut, Anda dapat menyimpulkan bahwa ADOdb merupakan salah satu library yang dapat menjadi pilihan utama untuk layer abstraksi database dari aplikasi database berbasis PHP.

perlukah EJB ?

Ini adalah ulasan dari seorang java developer tentang kefanatikan terhadap EJB dan realitasnya.

Saya tidak mengerti mengapa masih ada orang terobsesi dengan teknologi EJB ???

In my humble opinion, kecuali kita adalah aplha geek programmer, atau kita tergantung IDE yang canggih, percayalah ..... membangun EJB adalah painfull. Dan sebagai J2EE programmer (kecuali kita orang marketing) pastilah kita merasakan betapa complexnya metadata EJB, kita harus menyentuh 4 file untuk membangun satu component ejb (Remote:Local:Bean:Metadata). Lalu apakah yang akan kita dapatkan ? EJB menjanjikan tradeoff yang sebanding ?

EJB adalah teknologi yang powerfull kita mengakuinya dan juga semua orang yang terlibat.Saya termasuk salah seorang (kalau boleh dibilang) dulunya EJB Fanatik. Bahkan untuk membangun aplikasi J2EE yang sederhana saya gunakan EJB. Tetapi seiring dengan berjalannya waktu, applikasi yang dibangun sangatlah sulit diimplementasikan menggunakan EJB. Kita tahu betapa terlalu sederhananya CMP-QL, betapa borosnya BMP, betapa tidak bermanfaatnya SFSB (10 Fallacies Of Distributed Computing) dan hanya SLSB yang umumnya sering kita manfaatkan. Sehingga tidak jarang orang mengorbankan WORA karena keterbatasan EJB dengan spesifikasi dan teknologi supplement dari Vendor.

Contoh sederhananya, bagaimana kita bisa melakukan mekanisme paging 1000000 row jika menggunakan CMP ? kecuali kita menggunakan DesignPattern ValueListHandler yang notabene tanpa menyentuh EJB CMP sama sekali. (Jika ada programmer yang membuat program untuk melakukan MASS CREATE /READE /UPDATE /DELETE menggunakan EJB CMP/BMP maka salahkanlah kebodohan Architectnya yang sudah termakan orang marketing). EJB adalah salah satu alasan yang membuat J2EE tercoreng ,... sama seperti Applet menghancurkan nama besar Java.

Lalu bagaimana solusinya, ... tiap vendor memiliki spesifikasi yang berbeda2. JBoss-QL tidak dapat dimanfaatkan dalam web logic. Fitur web logic tidak dapat di implementasikan kedalam Web Sphere. Apa yang dijanjikan java WORA ... tidak dapat diimplementasikan dalam dunia nyata. Sehingga J2EE developer sangat tergantung pada vendor, ada yang sangat tergantung web logic, web sphere, sun appServer,oracle appServer bahkan JBoss.

EJB Sangat powerfull apakah seperti demikian ?.... sebagian orang menganggapnya steik diantara burger. Seperti roket dibandingkan pesawat, seperti limo daripada sedan.

Anggapan orang yang fanatik dengan EJB mengatakan distributed object adalah dasar Distributed Computing. Jika kita memang membutuhkan scalable serta distributed application yang vendor denpendent, java oriented, dan performance neglected EJB adalah solusi yang tepat. Apa yang saya maksud adalah infamous sun example Java PetStore. Kalau boleh dibilang PetStore adalah over engineered technology yang gagal.

Lalu apakah EJB Memang begitu powerfull sebagai distributed object. Apakah dengan meng-clustering EJB maka performansi meningkat ? Jika anda adalah programmer dan tidak termakan marketing sesungguhnya dengan mengcluster EJB dan berharap banyak pada remote interface hanyalah hitungan2 dalam teori.

Jika kita berharap terlalu banyak pada EJB sebagai distributed object dengan harapan scalable .... sebenarnya dapat saja terjadi SEANDAINYA 10 Fallacies Of Distributed Computing sudah tidak berlaku. Poin dari 10 fallacies of distributed computing (Effective Enterprise Java:Ted Neward)

1. The network is reliable

2. Latency is zero

3. Bandwidth is infinite

4. The network is secure

5. Topology doesn't change

6. There is one administrator

7. Transport cost is zero

8. The network is homogeneous

9. The system is monolithic

10.The system is finished

Berharap banyak pada remote EJB sebagai distributed object akan berhadapan dengan enterprise Fallacies. Tradeoffnya,.. performansi, resource, effective dan efficiensi menjadi terbengkalai. Padahal tujuan utamanya EJB adalah memudahkan mengembangkan Enterprise Scale System. Ternyata semuanya itu adalah keliru.

Bahkan Sun Microsystem secara tidak langsung memohon maaf kepada EJB Developer dengan mengeluarkan spesifikasi Local Interface pada EJB. Dimana distributed object yang sangat diagung2kan oleh EJB seandainya mereka harus mengeluarkan spesifikasi Local Object EJB,... dimana lagi distributed object sebagai dasar Enterprise jika harus menggunakan Local Object.

Untuk apa "SessionFacade" jika memang distributed object dengan mengexpose entity secara remote memudahkan jika alasannya sekedar memindahkan business logic di ejb container.

Untuk apa "TransferObject" seandainya attributenya sama seperti Entity Beans

Untuk apa "ValueListHandler" diciptakan seandainya Entity Beans memang Enterprise Entity.

.......... tidakkah kita sadari ini ? Teknologi dan DesignPattern yang ditawarkan sun secara tidak langsung menyarankan kita untuk meminimalisir penggunaan remote ejb,.. kemampuan sesungguhnya EJB dengan remote interface.

Hemat saya, sebagai sesama developer, ilmu selalu berkembang ... dan jangan sampai kita tidak mengikutinya. Buka mata, telinga dan hati. Jangan takut menghadapi perubahan, ... jika pernah mengikuti seminar "Who moved my cheese" kita sebagai programmer bagaikan tikus yang harus siap menghadapi perubahan, ejb 2 adalah masa lalu. Sekarang kita berharap pada EJB 3. Tetapi selagi menunggu tidak ada salahnya mempelajari teknologi yang lain, yang menjanjikan.

Semoga email ini tidak memacu flame. Dan saya tidak tertarik untuk diskusi berkepanjangan, mohon maaf jika ada reply tidak akan saya "entertain". Tetapi saya bertanggung jawab atas setiap kalimat yang saya tuliskan. Ini sekedar bahan renungan saja.

Penulis:
Ahmad Arif Rachim

Membuat scheduling task dengan java (Scheduling a recurring task) menggunkan lib j-schedule

j-schedule adalah lib java yang dikembangkan oleh forumnya ibm . lib ini membatu kita dalam membuat aplikasi schedule /task job lebih mudah ...
dowload di sini
http://www.ibm.com/developerworks/java/library/j-schedule.html#download

berikut kodinya

package org.tiling.scheduling.examples;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.tiling.scheduling.Scheduler;
import org.tiling.scheduling.SchedulerTask;
import org.tiling.scheduling.examples.iterators.DailyIterator;

public class AlarmClock {

private final Scheduler scheduler = new Scheduler();
private final SimpleDateFormat dateFormat =
new SimpleDateFormat("dd MMM yyyy HH:mm:ss.SSS");
private final int hourOfDay, minute, second;

public AlarmClock(int hourOfDay, int minute, int second) {
this.hourOfDay = hourOfDay;
this.minute = minute;
this.second = second;
}

public void start() {
scheduler.schedule(new SchedulerTask() {
public void run() {
soundAlarm();
}
private void soundAlarm() {
System.out.println("Bangun - bangun! " +
"Ini udah jam " + dateFormat.format(new Date()));
// Start a new thread to sound an alarm...
}
}, new DailyIterator(hourOfDay, minute, second));
}

public static void main(String[] args) {
AlarmClock alarmClock = new AlarmClock(7, 0, 0);
alarmClock.start();
}


}
hasilnya
Bangun - bangun! Ini udah jam 24 Aug 2003 07:00:00.023
Bangun - bangun! Ini udah jam 25 Aug 2003 07:00:00.001
Bangun - bangun! Ini udah jam 26 Aug 2003 07:00:00.058
Bangun - bangun! Ini udah jam 27 Aug 2003 07:00:00.015
Bangun - bangun! Ini udah jam 28 Aug 2003 07:00:00.002
...
dalam hal ini aplikasi java yang kita buat .. akan menulikaskan pesan tersebut setiap pukul 07:00:00 setipa hari

demikan terimakasih :d

jakarta poi

jakarta poi adalah lib java yang digunakan untuk manipulasi data ke Microsoft's OLE 2 Compound Document format menggunakan java murni ,alias tanpa embel2 dll ,atau component lain bener2 pure java ... keterangan lebih lanjut silahkan baca : http://poi.apache.org

untuk menggunakanya pertama-tama download libnya .. di http://www.apache.org/dyn/closer.cgi/poi/

sedangakan kodingnya sbb:(Dalam hal ini memanipulasi data ke format excel) Java to Excel


package org.poi.sampel.action;

import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;
import com.bedaplus.sis.ejb.sessionbean.SisMasterSessionHome;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import javax.ejb.CreateException;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javax.naming.NamingException;
import org.apache.poi.hssf.util.Region;
import java.rmi.RemoteException;
import org.apache.poi.hssf.util.HSSFColor;
import javax.servlet.ServletOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import java.util.ArrayList;
import javax.naming.InitialContext;
import javax.naming.Context;
import java.util.List;

import javax.rmi.PortableRemoteObject;
import java.io.FileOutputStream;

//lib untuk memakai poi
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;

public class excelCtkMurid
extends Action {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest servletRequest,
HttpServletResponse servletResponse) {
HSSFWorkbook wb = new HSSFWorkbook();
FileOutputStream fileOut = null;
FileInputStream fileIn = null;
SisMasterSession ejbSession = null;


System.out.println("HSSF => Create Workbook");
try {
HSSFSheet sheet = wb.createSheet("new Data Murid");
//Border
HSSFCellStyle style = wb.createCellStyle();
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBottomBorderColor(HSSFColor.BLACK.index);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setLeftBorderColor(HSSFColor.BLACK.index);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setRightBorderColor(HSSFColor.BLACK.index);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setTopBorderColor(HSSFColor.BLACK.index);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

HSSFCellStyle style2 = wb.createCellStyle();
style2.setBorderBottom(HSSFCellStyle.BORDER_NONE);
style2.setBottomBorderColor(HSSFColor.BLACK.index);
style2.setBorderLeft(HSSFCellStyle.BORDER_NONE);
style2.setLeftBorderColor(HSSFColor.BLACK.index);
style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
style2.setRightBorderColor(HSSFColor.BLACK.index);
style2.setBorderTop(HSSFCellStyle.BORDER_NONE);
style2.setTopBorderColor(HSSFColor.BLACK.index);

HSSFCellStyle styleH = wb.createCellStyle();
styleH.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);
styleH.setBottomBorderColor(HSSFColor.BLACK.index);
styleH.setBorderLeft(HSSFCellStyle.BORDER_THIN);
styleH.setLeftBorderColor(HSSFColor.BLACK.index);
styleH.setBorderRight(HSSFCellStyle.BORDER_THIN);
styleH.setRightBorderColor(HSSFColor.BLACK.index);
styleH.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);
styleH.setTopBorderColor(HSSFColor.BLACK.index);
styleH.setWrapText(true);
styleH.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
styleH.setAlignment(HSSFCellStyle.ALIGN_CENTER);

HSSFCellStyle styleR = wb.createCellStyle();
styleR.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);
styleR.setBottomBorderColor(HSSFColor.BLACK.index);
styleR.setBorderLeft(HSSFCellStyle.BORDER_THIN);
styleR.setLeftBorderColor(HSSFColor.BLACK.index);
styleR.setBorderRight(HSSFCellStyle.BORDER_THIN);
styleR.setRightBorderColor(HSSFColor.BLACK.index);
styleR.setBorderTop(HSSFCellStyle.BORDER_DOTTED);
styleR.setTopBorderColor(HSSFColor.BLACK.index);



HSSFCellStyle style3 = wb.createCellStyle();
style3.setAlignment(HSSFCellStyle.ALIGN_LEFT);
style3.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

HSSFCellStyle style4 = wb.createCellStyle();
style4.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style4.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

sheet.addMergedRegion(new Region(0, (short) 0, 0, (short) 2));
sheet.addMergedRegion(new Region(1, (short) 0, 1, (short) 2));
sheet.addMergedRegion(new Region(2, (short) 0, 2, (short) 2));
sheet.addMergedRegion(new Region(0, (short) 4, 0, (short) 7));
sheet.addMergedRegion(new Region(1, (short) 4, 1, (short) 7));
sheet.addMergedRegion(new Region(2, (short) 4, 2, (short) 7));

drawCell( (short) 0, (short) 0, sheet, "Nama Sekolah ", false, style3);
drawCell( (short) 0, (short) 3, sheet, ": SMP Islam Al-Azhar 12 Rawamangun", false, style3);
drawCell( (short) 0, (short) 4, sheet, "DAFTAR NAMA MURID", false, style4);
drawCell( (short) 0, (short) 8, sheet, "Format", false, style4);
drawCell( (short) 0, (short) 9, sheet, ": 8355", false, style4);
drawCell( (short) 1, (short) 0, sheet, "Alamat", false, style3);
drawCell( (short) 1, (short) 3, sheet, ": Jalan Raya Sekali", false, style3);
drawCell( (short) 1, (short) 4, sheet, " ", false, style4);
drawCell( (short) 1, (short) 8, sheet, "Kelas ", false, style4);
drawCell( (short) 2, (short) 0, sheet, "Telepon", false, style3);
drawCell( (short) 2, (short) 3, sheet, ": 47868234", false, style3);
drawCell( (short) 2, (short) 4, sheet, "TAHUN PELAJARAN 2007/2008", false, style4);

sheet.addMergedRegion(new Region(0, (short) 0, 0, (short) 2));
sheet.addMergedRegion(new Region(1, (short) 0, 1, (short) 2));
sheet.addMergedRegion(new Region(2, (short) 0, 2, (short) 2));
sheet.addMergedRegion(new Region(0, (short) 4, 0, (short) 7));
sheet.addMergedRegion(new Region(1, (short) 4, 1, (short) 7));
sheet.addMergedRegion(new Region(2, (short) 4, 2, (short) 7));


drawCell( (short) 4, (short) 0, sheet, "No.", true, styleH);
drawCell( (short) 4, (short) 1, sheet, "Kelas", true, styleH);
drawCell( (short) 4, (short) 2, sheet, " Nomer Induk ", true, styleH);
drawCell( (short) 4, (short) 3, sheet, " Nama Murid ", true,
styleH);
drawCell( (short) 4, (short) 4, sheet, "L/P", true,
styleH);
drawCell( (short) 4, (short) 5, sheet, " Tempat Tanggal Lahir ", true,
styleH);
drawCell( (short) 4, (short) 6, sheet, "Agama", true, styleH);
drawCell( (short) 4, (short) 7, sheet, " Nama Orang Tua ", true, styleH);
drawCell( (short) 4, (short) 8, sheet, " Alamat ", true, styleH);
drawCell( (short) 4, (short) 9, sheet, " No. dan Tahun STTB ", true,
styleH);





}
fileOut = new FileOutputStream("workbook.xls");
//servletResponse.setHeader();
wb.write(fileOut);
fileOut.close();
}

catch (FileNotFoundException ex) {
System.out.print("No File Found");
}
catch (IOException ex) {
/** @todo Handle this exception */
}

finally {
}

return actionMapping.findForward("success");
//return null;

}
private void drawCell(short x, short y, HSSFSheet sheet, String value,
boolean autosize, HSSFCellStyle style) {
HSSFRow row = sheet.createRow( (short) x);
HSSFCell cell = row.createCell( (short) y);
cell.setCellValue(new HSSFRichTextString(value));
cell.setCellStyle(style);
if (autosize) {
sheet.autoSizeColumn( (short) y);
}

}

private void drawCell(short x, short y, HSSFSheet sheet, String value,
boolean autosize) {
HSSFRow row = sheet.createRow( (short) x);
HSSFCell cell = row.createCell( (short) y);
cell.setCellValue(new HSSFRichTextString(value));
if (autosize) {
sheet.autoSizeColumn( (short) y);
}
}
}


demkian dan terima kasih ,
mohon maklum , masih newbie banget ...(kalo ada yang salah dengan metode ini,atau ada cara yang lebih bagus )
saya cuman pengen berbagi dan belajar sedikit menulis ..