Java WebService

Posted by: on Jun 10, 2012 | 3 Comments

Salah satu tugas saya yang baru adalah menangani masalah integrasi banyak sekali aplikasi dengan berbagai macam platform teknologi. Sebuah tantangan yang sangat menarik setelah bertahun-tahun menangani sistem Enterprise Resource Planning (ERP). Integrasi yang diimplementasikan pabrik tempat saya bekerja menggunakan pendekatan Service Oriented Architecture (SOA), memakai produk Oracle Fusion SOA Suites Middleware.

Berbicara tentang SOA, tentu tak lepas dengan WebService. Setiap aplikasi yang SOA-ready paling tidak harus bisa memberikan layanan lewat media WebService. Oleh karena itu, saya membuat panduan kecil bagaimana membuat WebService dari sebuah aplikasi Java. Bagaimana menyulap sebuah method di Java menjadi bisa dipanggil dari luar melalui WebService. Dengan beberapa annotation, hal itu sangat mudah dilakukan.

Di sini teknologi yang saya pakai adalah: Java SDK 6, JAX-WS, Oracle Weblogic 11g Release 1, Eclipse dengan plugin Oracle Weblogic Server Tools.

Silakan didownload panduan kecilnya di Dropbox Public Folder saya di sini: Introduction to Java WebServices. Sengaja pakai judul bahasa Inggris mengikuti tren judul-judul buku di toko buku itu. Sepertinya kalau nggak pakai Bahasa Inggris nggak keren dan menjual ya? Padahal isinya juga Bahasa Indonesia ndeles… hehe…

JRockit Lebih Baik Daripada Sun JDK

Posted by: on Jul 26, 2011 | 2 Comments

Sejak mengenal Java hingga sampai sekarang, saya adalah pengguna setia Sun Java, baik Java Development Kit-nya maupun Java Runtime Environment-nya. Bukannya apa-apa, saya memang tidak pernah mengenal SDK (Standard Development Kit) selain bawaan dari Sun. Dan saya tidak pernah menemui masalah ketika memakainya di production environment.

Hingga kemarin waktu saya mau deploy Liferay. Saya menggunakan Liferay Community Edition edisi bundled dengan Tomcat. Java bawaan yang dipakai adalah Sun JRE 1.6. Server yang dipakai adalah Windows Server 2003 (32 bit) dengan total RAM 3GB yang berjalan di mesin virtual VMWare di atas IBM Blade Server.

Tetapi performanya sangat lambat. Saya tidak bisa mengalokasikan semua memory untuk Java. Maksimal saya hanya bisa alokasi heap space-nya di 1150 MB. Anehnya, Java tidak memakai jatah yang sudah diberikan, maksimum hanya sekitar 700 MB physical memory yang dipakai, selebihnya diswap ke virtual memory yang pastinya jauh lebih lambat.

Mentok, saya coba memakai JRockit dari BEA. Ini dari pengalaman teman saya yang mengalami masalah serupa dengan performance JDK bawaan Sun. Saya bisa mengalokasi RAM sekitar 1500 MB dan sepertinya JRockit mampu memakainya secara maksimal. Hasilnya, peningkatan performance sudah cukup terasa dengan waktu load yang lebih cepat — meskipun belum terlalu acceptable buat saya. Tujuh detik untuk loading portlet yang berat masih terlalu lambat. Tetapi paling tidak, pergantian JDK ini sudah cukup berpengaruh. Mungkin setelah ini saya akan coba memakai Liferay yang bukan versi bundled-nya.

Menariknya, dulu dua SDK ini adalah kompetitor satu sama lain. Tetapi faktanya sekarang Sun adalah milik Oracle, dan BEA juga dibeli Oracle. Dua-duanya menjadi produk Oracle Middleware. Namanya menjadi Oracle Java Standard Edition dan Oracle JRockit. Saya agak geli ketika download kedua SDK ini dari situs yang sama.

Kembali ke Masa Silam: Secangkir Kopi Java

Posted by: on Nov 9, 2010 | 5 Comments

Liburan semester waktu sekolah S1 dulu memang tiada duanya. Liburannya bisa sampai dua bulan dan bagi saya yang cukup beruntung tidak harus mengulang mata kuliah di semester pendek, saya bisa menghabiskan waktu-waktu itu dengan nganggur di rumah. Bermalas-malasan, bersantai-santai, tidak dibebani rutinitas. Hal yang kini sungguh merupakan kemewahan yang jarang sekali bisa dinikmati.

Tetapi mungkin juga saya adalah orang yang tidak bisa diam terlalu lama. Setiap liburan semester selalu saya isi dengan belajar bahasa pemrograman yang tidak diajarkan di sekolah, macam Visual Basic, ASP, dll. Sekitar enam tahun yang lalu, liburan saya pakai buat mendalami bahasa Java (waktu itu masih versi 1.4). Dan tiba-tiba sebuah ide muncul: menulis buku tentang Java.

What an idea! Gara-garanya saya ingin memberi hadiah ulang tahun kepada seorang gadis pujaan! Hahaha… beginilah kalau seorang geek memberikan hadiah ulang tahun, bukannya sesuatu yang macho atau romantis, tetapi si gadisnya malah disuruh berpusing-pusing baca buku pemrograman. Ah, masa yang telah berlalu, tetapi itu memberikan saya sebuah milestone untuk menulis tutorial dan panduan-panduan berikutnya (lihat di halaman Publikasi).

Buku pertama saya ini, Secangkir Kopi Java, sempat hilang karena hardisk saya terbakar sehingga file-file isi bahan pelajaran di sekolah (termasuk Tugas Akhir saya: Implementasi Sistem Temu Kembali Citra berdasarkan Fraktal Histogram) hilang semua. Tetapi suatu hari pernah ada yang mengirim email ke saya menanyakan salah satu materi yang saya tulis di buku itu. Sembari menjawab pertanyaannya, saya sekalian minta copy PDF-nya. Alhamdulillah, meskipun tak punya dokumen MS-Word-nya, saya punya PDF-nya lagi, he he he… (Thanks to Anggi-Nanaq).

Waktu baca ini lagi, saya ketawa-ketawa sendiri lihat gaya bahasa yang saya pakai. Yeah, seperti jika lihat archive blog ini di tahun-tahun segitu (2004-2005), saya memakai kata ganti “aku” dan lebih bergaya tidak formal. Lebih tersenyum lebar lagi waktu baca kata-kata penutupnya. Ah… masa yang telah berlalu…

Download

Eclipse BIRT Ganymede: Loncatan Lebar BIRT

Posted by: on Dec 26, 2008 | 3 Comments

Saya pernah membahas tentang beberapa mesin pembuat laporan berbasis Java (Java reporting engine) dan menahbiskan Actuate sebagai tool reporting yang paling hebat. Tapi sayangnya, lisensi Actuate tidak free alias harus membayar sejumlah uang tertentu agar bisa memakainya. Di sisi open source, saya menganggap Jasper Report dan Eclipse BIRT sebagai tool reporting terbaik yang free.

Fleksibilitas

Bussiness Intelligence Reporting Tool (BIRT) merupakan buah manis kerjasama yang cantik antara Actuate dan Eclipse. Menurut saya, ini adalah terobosan bagaimana sebuah report designer. Tidak memiliki batasan slot-slot (Actuate) atau band-band (Jasper), BIRT menawarkan fleksibilitas tanpa batas. Anda bisa menempatkan record-record berulang dimana saja (tidak harus di band detail — misalnya), cukup memasang pallete List atau Table. Sebaliknya, untuk record-record yang tidak berulang, selama Anda tidak memasukkannya pada pallete List atau Table, ia hanya ditampilkan sekali saja. Fitur ini akan sangat menyederhanakan SQL query statement ke database.

Multiple Data Set

Data Set adalah sebuah himpunan data yang akan ditampilkan dalam report. Sumber data set biasanya adalah melalui SQL query. Nah, di BIRT, kita bisa memakai banyak data set yang bisa ditempatkan di pallete mana saja dan bisa menjadi sub data set dari data set yang lain. Ini sangat memudahkan bagi mereka yang tidak bisa membuat SQL query seperti saya. SQL Query yang kompleks (crosstab segala macem) bisa dipecah menjadi beberapa query sederhana dalam beberapa data set. Menakjubkan sekaligus menyenangkan!

State of the Art: Eclipse Birt Ganymede

Versi ini sangat banyak perbaikan yang besar, utamanya di masalah performance, baik di sisi Report Designer-nya maupun runtime-nya.  Waktu masih memakai Eclipse Birt Europa, saya mengeluh tentang lambatnya respon desainer dan runtime ketika sudah dipasang di production server. Di sini, Eclipse Birt Ganymede, semua sudah diperbaiki. Respon desainer yang tanggap menjadikan lingkungan yang menyenangkan untuk pembuatan report. Ketika dipasang di production server, proses kompilasi dan hasil tampilan jadinya juga tidak terlalu lama.

Bagaimana tentang kualitas hasilnya? Format PDF tetap rapi seperti pendahulunya, dan ada perbaikan besar di format Microsoft Excel (XLS). Salah satu hal yang paling dikeluhkan para programmer adalah tidak adanya report engine yang bagus untuk hasil berformat xls. Bahkan Jasper yang paling terkenal itu pun tidak bisa menampilkan hasil report excel dengan rapi jali. Namun, Eclipse Birt Ganymede menampilkan fitur yang paling menggiurkan dengan hasil format excel yang sangat rapi. Pembuatan dan pembagian cell gridnya masih rapi seperti buatan tangan (biasanya kalau buatan report engine kacau balau) dan yang paling menarik: garis-garis bantu cell-nya masih terlihat. Sangat dekat dengan hasil buatan manual.

Sebagai penutup, saya kira saat inilah Birt telah *benar-benar* bisa digunakan sebagai reporting engine. Kalau Jasper tidak ada perbaikan berarti, bisa dikatakan inilah tool reporting berbasis Java yang terbaik sekarang. Bahkan konon kabarnya, Actuate versi yang terbaru juga menggunakan engine yang sama persis dengan BIRT sebagai basis mesinnya. Maklum, BIRT kan juga bayi-nya Actuate.

Silakan langsung menuju TKP! *ijo-ijonya gan… :beers:

Memperkenalkan: JBoss Seam Framework

Posted by: on Nov 30, 2008 | 15 Comments

ANOTHER JAVA EE FRAMEWORK

Saya rasa, Java Enterprise telah memasuki masa titik jenuhnya. Hal ini ditandai dengan munculnya bermacam-macam framework dengan gaya yang berbeda-beda. Seringkali framework malah justru mempersulit kita dalam membangun sebuah aplikasi Java. Kejenuhan ini adalah keadaan yang sangat rawan ketika sebuah paradigma pemrograman baru masuk dan membawa kemudahan-kemudahan yang segar yang bisa menghajar habis Java Enterprise (RoR — Ruby on Rails, akankah ini adalah pembunuh Java?).

Kemapanan Action Based

Framework awal Java bergaya request-action-response based mengikuti tingkah laku alami dari protokol HTTP. Pemimpin sektor ini adalah Struts mulai dari Struts 1.x, dan ketika Struts ditinggal programmernya, kemapanan Struts dilanjutkan oleh Webwork yang melahirkan Struts 2.x.

Dalam perkembangannya, Struts tidak cukup menjadi sebuah framework. Di ranah Model di dalam trinitas suci paradigma Model-View-Controller, cukup merepotkan melakukan akses database dengan menggunakan generic JDBC biasa. Oleh karena itu, munculah framework iBatis yang memindahkan penulisan SQL dalam file XML sehingga ketika terjadi perubahan query, paket aplikasi tidak perlu dikompilasi ulang dan di-deploy ulang. Disamping itu, akses database juga bisa di-inject langsung ke dalam objek-objek Java Bean dengan menggunakan Object Relational Mapping (ORM). Oleh karena itu, muncul kemudian Java Persistance API (JPA), Enterprise Java Bean 3 (EJB3), dan Hibernate ORM.

Tumpukan stack framework berikutnya adalah sebuah Inversion of Control yang secara sederhana dijelaskan sebagai pengatur lalu lintas data antara Model (Hibernate ORM) dan View (Struts). Ia hidup dalam ranah Controller. Di sini framework yang paling populer adalah Spring Framework.

Masalah Klasik

Nah, sejauh ini, kita sudah memiliki tiga tumpukan framework: Struts, Spring, dan Hibernate. Dari tiga framework ini, sudah bisa ditebak bahwa masalah yang pertama kali muncul adalah, waktu set up aplikasi yang lama.

Sebenarnya, untuk membuat aplikasi enterprise berbasis web, yang perlu kita buat secara berulang-ulang (dan karenanya membosankan adalah):

  1. Membuat mapping antara database ke objek Java Bean. Bayangkan jika akan ada 15 tabel yang saling berelasi. Artinya, saya harus membuat 15 file XML yang menjelaskan detail setiap kolom, primary key, tipe kolom, relasi-relasinya dengan tabel lain…. menyakitkan kawan.
  2. Tampilan user untuk mekanisme CRUD (Create, Update, Delete) beserta validasinya. Anda pasti mengerti kalau pernah membuat form HTML berisi textfield, combo box, tombol-tombol, kemudian membuat aliran datanya dengan request GET atau POST, membuat query SELECT, UPDATE, dan sekaligus DELETE untuk tiga halaman. Lalu memvalidasinya agar inputan user sesuai dengan spesifikasi tabel di database. Setelah itu, jika ada 15 tabel, Anda harus mengulanginya di 14 tabel lain. Total akan ada 15 * 3 = 45 pekerjaan berulang-ulang membosankan untuk Anda.

Bukankah menyenangkan sekali kalau ada sebuah tools yang melakukan otomatisasi itu semua? Membaca tabel di database dan melakukan reverse engineer. Membuatkan hibernate mapping-nya, membuat class-class Java Bean, membuatkan halaman-halaman CRUD untuk setiap tabel dan membuat validasi berdasarkan spesifikasi tabel secara otomatis dalam satu klik mouse saja?? ;;)

Seam Framework: Datang dari Event-Based Web Programming

Dunia web Java terguncang ketika Microsoft menawarkan .net framework-nya yang mengiming-imingi programmer dengan gaya event-based-nya. Halaman web tidak lagi dipandang sebagai halaman HTML yang mengirimkan request kepada server, tetapi sebagai desktop yang memiliki tombol yang bisa diklik dan memanggil method tertentu ketika sebuah komponen diberi suatu aksi. Lupakan request GET atau request POST, Anda hanya melihat komponen-komponen yang bisa diklik.

Tapestry adalah framework populer Java yang menggunakan gaya component-based ini. Kemudian muncul spesifikasi Java Server Faces yang bagi saya mirip dengan ASP.net. JSF segera populer karena didukung dan disosialisasikan oleh vendor-vendor raksasa macam Sun dan Oracle (dengan Oracle ADF-nya).

Jika Struts berangkat dari Java Server Pages (JSP), maka Seam berangkat dari JSF. Kalau Struts bicara masalah Action dan Form, maka Seam lebih banyak bicara tentang Managed Beans dan Annotations. Secara standar, Seam menyediakan semua hal secara lengkap. Di bagian model, Seam menggunakan implementasi Entity Beans milik EJB3 dengan Hibernate Annotations dan Java Persistance API (JPA). Di sisi View, Seam menggunakan JSF Facelets standar, RichFaces, dan Ajax4JSF. Controller ditangani oleh ia sendiri.

Seam-Gen

Tetapi saya tidak terlalu tertarik kalau Seam hanya menyediakan yang itu-itu saja. Just another suck frameworks, apalagi Seam terlalu tergantung dengan JBoss Application Server yang gendut. Namun demikian, satu hal yang membuat saya tertarik meliriknya adalah satu tool command line kecil bernama Seam-Gen. Tool ini sebenarnya hanyalah satu set prosedur yang berbasis Hibernate Tools yang melakukan code-generation seperti melakukan Reverse Enginner, mapping database ke objek, sekaligus membuatkan halaman-halaman CRUD dalam satu perintah. Jawaban atas impian saya di atas! Dan dengan bantuan JBoss Tools, sebuah plugin Eclipse, pekerjaan ini benar-benar menjadi satu klik saja!

Benar-benar fun! CRUD dan Validasi hanya dalam satu klik? Apakah saya berlebihan kalau saya mengatakan ini benar-benar menyenangkan? Anda harus coba ini.

Silakan kunjungi: Seam Framework untuk download Seam dan ikuti roadmap-nya di Getting Started with Seam.

Bagi Anda yang sama sekali belum pernah coba pemrograman Java EE, mungkin Anda agak kesulitan memahami Seam, jadi saya sarankan untuk memahami konsep-konsep berikut ini terlebih dahulu:

PS: Am I writing in either Bahasa Indonesia or even English?

Memperkenalkan: XML-RPC

Posted by: on Aug 21, 2008 | 15 Comments

XMLRPC adalah akronim dari eXtensible Markup Language – Remote Procedure Call. Sebuah spesifikasi XML yang menjelaskan mengenai mekanisme pemanggilan prosedur jarak jauh dengan menggunakan XML. Bisa dikatakan, XMLRPC adalah salah satu bentuk webservice yang disederhanakan dari standar yang konvensional. Dua sistem yang benar-benar terpisah dan berbeda platform serta lingkungan bisa saling berkomunikasi lewat sarana file XML.

Protokol komunikasi yang digunakan adalah protokol standar yang paling populer di dunia: HTTP. Request yang dikirim lewat HTTP harus menggunakan method POST. Prosedur yang akan dipanggil beserta parameternya dibungkus dalam file XML dalam spesifikasi XMLRPC. Demikian pula return value-nya, sebelum dikirim akan dibungkus dulu dalam bentuk XML dan ditransfer diatas lalu lintas protokol HTTP di internet.

Gambaran besar secara sederhana bisa dijelaskan dalam gambar di bawah ini:

Spesifikasi yang dibuat oleh tim XMLRPC sudah cukup lengkap, misalnya bagaimana cara mengirim parameter dan mengembalikan return value. Termasuk pula data type standar XMLRPC juga disertakan.

Implementasi spesifikasi XMLRPC telah diterapkan secara luas di berbagai lingkungan pemrograman. Di Java sendiri, tim dari Apache telah membuat library yang compliance dengan spesifikasi XMLRPC. Hal ini memudahkan kita untuk tidak perlu repot-repot berurusan di level rendah seperti pembuatan parser untuk mengolah data dari XML. Semua telah dibungkus dalam level yang lebih tinggi dalam bentuk class-class library. Misalnya, setiap objek java.util.Date akan  dikonversi menjadi tipe data standar XMLRPC secara otomatis. Dan banyak lagi kemudahan-kemudahan yang lainnya.

Saat ini, beberapa layanan populer telah mendukung XMLRPC. Yang paling mencolok tentu saja adalah layanan blogging. Kini setiap mesin blog saling berkomunikasi satu sama lain (trackback, pingback) dengan menggunakan standar XMLRPC. Dengan XMLRPC ini, beberapa layanan baru untuk mengelola blog di luar software standar muncul. Contohnya adalah WordPress API dan Blogger API. Kini kita bisa menulis posting blog dengan software berbasis desktop (Microsoft Word 2007 bisa melakukannya) tanpa harus terkoneksi dulu ke internet.

Akankah XMLRPC akan berkembang sebagai alternatif dari standar yang sudah ada macam SOAP,  UDDI, dan WSDL? Kita tunggu saja.

Tentang Konsep Inheritance, Overloading, dan Overriding

Posted by: on Aug 20, 2008 | 4 Comments

Ada trinitas suci dalam “agama” pemrograman berorientasi objek (OOP — Object Oriented Programming), yaitu Inheritance, Overloading (Polymorphism), dan Overriding. Tiga terminologi ini adalah roh OOP. Seorang programmer OOP paling tidak harus menguasai konsep ini, kalau tiga konsep ini belum dipegang, akan sulit menguasai bahasa OOP.

Pada artikel ini, saya mencoba menjelaskan tentang apa yang saya pahami mengenai tiga terminologi tersebut. Bagi yang belum pernah mencoba/mengenal bahasa OOP, saya sarankan membaca konsep dasar pemrograman OOP terlebih dahulu. Bagi yang sudah mahir mengenai OOP di C++, saya harus katakan bahwa bahasa OOP milik Java sangat sederhana. Java tidak mengenal konsep multiple inheritance atau konsep method virtualization (semua method di Java adalah virtual) dengan alasan penyederhanaan sehingga OOP Java tidak serumit OOP C++. Dan tentu saja, kalau ada konsep yang pemahaman saya ternyata salah, mohon kiranya saya diberi tahu, hehehe…

Silakan baca-baca atau download di sana.

Switch to our mobile site