Cara Cepat Mengembangkan Solusi Java Enterprise dg MVC - Cimande 1.0 Book

5,190
-1

Published on

Cara Cepat Mengembangkan Solusi Java Enterprise dg MVC - Cimande 1.0 Book

Published in: Business, Technology, Education
3 Comments
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
5,190
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
575
Comments
3
Likes
2
Embeds 0
No embeds

No notes for slide

Cara Cepat Mengembangkan Solusi Java Enterprise dg MVC - Cimande 1.0 Book

  1. 1. Seri Enterprise OpenSourceCara CepatMengembangkanSolusi Java Enterprisedengan Metode MVCFrans ThamuraLeo HeryantoEndy Muhardin Penerbit Bambumas
  2. 2. Seri Enterprise OpenSourceCara CepatMengembangkanSolusi Java Enterprisedengan Metode MVCFrans ThamuraLeo HeryantoEndy Muhardin Penerbit Bambumas
  3. 3. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCCara Cepat Mengembangkan AplikasiJava dengan Metode MVCHak Cipta © 2006 pada penulisHak Cipta dilindungi Undang-Undang. Dilarang memperbanyak atau memindahkansebagian atau seluruh isi buku ini dalam bentuk apapun, baik secara elektronis maupunmekanis, termasuk memfotocopy, merekam atau dengan sistem penyimpanan lainnya,tanpa izin tertulis dari Penulis dan Penerbit.ISBN: 979-25-5950-7Cetakan pertama : November 2006 Ketentuan pidana pasal 72 UU No. 19 tahun 2002 1. Barang siapa dengan sengaja dan tanpa hak melakukan kegiatan sebagaimana dimaksud dalam pasal 2 ayat (1) atau pasal 49 ayat (1) dan ayat (2) dipidana dengan pidana pen- jara paling singkat 1 (satu) bulan dan/atau denda paling sedikit Rp. 1.000.000 (satu juta ru- piah) atau pidana penjara paling lama 7 (tujuh) tahun dan/atau denda paling banyak Rp. 5.000.000.000.00 (lima miliar rupiah). 2. Barang siapa dengan sengaja menyiarkan, memamerkan, mengedarkan, atau menjual ke- pada umum suatu Ciptaan atau barang hasil pelanggaran Hak Cipta atau Hak Terkait seb- agaimana dimaksud pada ayat (1), dipidana dengan pidana penjara paling lama 5 (lima) tahun dan/atau denda paling banyak Rp. 500.000.000,00 (lima ratus juta rupiah)iv
  4. 4. Seri Enterprise OpenSourceSekilas Mengenai Buku dan PenulisBuku ini adalah sebuah buku yang dikembangkan yang me-nerangkan proses integrasi dari projek Open Source paling pop-uler dimuka bumi ini menjadi sebuah projek Open Source baru,yang merupakan integrasi dari projek yang telah dipilih. Projektersebut adalah Cimande, PASIR dan Postila.Diskusi dengan penulis dapat dilakukan melalui forum di web-site Bambumas dengan URL: http://www.bambumas.com/ forumAdapun profile penulis adalah sebagai berikut:Frans ThamuraFrans Thamura adalah pendiri Java User Group Indonesia, JavaChampions pertama di Indonesia, sebuah posisi bergengsi dariseseorang yang gerakannya diakui dunia, CEO dari beberapaperusahaan IT, saat ini beliau khusus melayani pendanaan ge-rakan Open Source berbasis Java untuk berbagai industri teru-tama manufacturing ataupun egoverment, pendiri BlueOxygen,pusat pengembangan projek Open Source berbasis Java.Beliau telah lebih dari 10 tahun malang melintang didunia ITmemberikan konsultansi untuk berbagai jenis masalah manaje-men operasional menggunakan IT, termasuk juga konsultansi cy-berbranding dan community building.Beliau dapat dihubungi melalui emailnya frans@intercitra.com v
  5. 5. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCLeo HeryantoLeo Heryanto adalah konsultan Java dan instruktur MeruvianManagement College, training center Open Source Java pertamadi Indonesia, aktif berkontribusi untuk pengembangan projek di-dalam BlueOxygen. Hampir semua contoh kode didalam bukuini adalah karya beliau. Beliau dapat dihubungi melalui emailnyaleo@meruvian.comEndy MuhardinEndy Muhardin adalah konsultan IT di Indonesia, mengelolabeberapa projek Open Source berbasis Java diantarnya adalahPlaybilling, sebuah projek Open Source billing warnet yangmengadopsi teknologi Spring, Freemarker, serta iBatis.Beliau aktif didalam Java User Group sebagai pelopor adopsiSpring untuk segala solusi. Beliau saat ini full time bekerja dipe-rusahaan BaliCamp sebagai konsultan IT. Beliau dapat dihubungmelalui emailnya endy@artivisi.comvi
  6. 6. Seri Enterprise OpenSource Kata PengantarTidak terasa hampir 6 tahun berlalu, tepatnya sejak January2001, projek BlueOxygen telah dijalani, banyak sekali solusi danteknologi yang digunakan dan diganti dalam proses pengembangandan sampai akhirnya menjadi sebuah buku, dan dapat terbit. Buku inijuga adalah sebuah perjalanan panjang yang ide pengembangannyadimulai pada tahun 1999 di sebuah kota bernama Kisaran dansebuah kamar kost di sekitar Tawakal, Grogol, Jakarta. Buku yangjuga dapat dikatakan sekelumit jawaban dari sebuah perjalananmemecahkan sebuah nilai kekecewaan kehidupan. Buku yangmenjadi simbol awal dari perjalanan mencapai sebuah impianyang masih panjang.Projek yang semula diciptakan dengan kode “smiletown”, sebuahprojek yang diciptakan untuk membuat seluruh anak-anak diSydney dapat tidur dengan tenang dan dekat dengan orangtuanya, walaupun orang tuanya tidak ada disebelahnya karenakesibukannya.Projek ini telah berubah bentuk, yang semula merupakan sebuahprojek pengembangan adopsi struktur organisasi menjadiimplementasi pengembangan sebuah platform terpadu. Diharapkanmelalui buku ini, jiwa dari pengembangan dan kemandirian dapattumbuh setelah membacanya. Yang terpenting dari pengerjaansebuah projek BlueOxygen ini adalah bukan kode atau hasilnyatetapi sebuah nilai perjuangan dan komitmen pengembangan sertainteraksi dengan pihak lain. Bukti bahwa kejujuran dan kerja kerastidaklah cukup.Buku ini sarat berhubungan dengan projek BlueOxygen, yangsebenarnya adalah sebuah novel perjalanan berpetualang dalam vii
  7. 7. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCmempelajari teknologi Java, branding, dan juga salah satu bentukimplementasi, bagaimana teori aktivitas dapat diimplementasikandidalamnya.Buku ini juga sebenarnya adalah gambaran solusi, bagaimanaseorang manusia berusaha bertahan didunia persaingan yangsemakin sengit dari tahun ke tahun, dimana dunia IT adalah duniayang sepersekian dari sebuah kebutuhan operasional, tetapi sebuahmodal yang diberikan Tuhan yang paling murah bagi mereka yangtidak mampu untuk mencapai impiannya, sebuah sarana impianyang dapat dilakukan dengan hanya bermodalkan niat. Walaupunsampai hari ini penulis belum tahu, apakah projek BlueOxygen iniadalah media yang sebenarnya untuk mencapai impian itu.Projek BlueOxygen juga salah satu bentuk solusi yang membuatpenulis dapat bertahan didunia IT di Indonesia, salah satu saranayang membantu publikasi penulis sehingga dapat bertemudengan orang-orang yang umumnya hanya dapat dibaca namanyadimedia masa. Sarana yang memungkinkan penulis dapat menjadicounterpart yang satu level dengan para vendor, yang umumnyameminta sebuah kontribusi dengan nilai tertentu atau nilai investasiyang tidak sedikit, nilai yang mahal dan harus diberikan, hanyauntuk memulai sebuah hubungan atau berekanan.Buku ini dipersembahkan kepada semua pihak, dan diharapkansetelah membaca buku ini, walaupun isinya mungkin terlalu teknisuntuk beberapa pihak. Diharapkan buku ini dapat menjadi sumberinspirasi, dan juga menjadi fondasi bagi siapapun mengenaipentingnya platform. Sumber inspirasi pentingnya arti sebuahsustainabilitas. Buku ini juga diharapkan menjadi sebuah contohpentingnya swasembada teknologi untuk sebuah negara, baikjangka pendek maupun jangka panjang.Terima kasih diucapkan kepada semua pihak, mulai dari PeterManzo, Tony Haryanto, para investor Intercitra, rekan-rekan JUGviii
  8. 8. Seri Enterprise OpenSourceIndonesia, serta mereka yang telah dan masih menjadi anggotakeluarga Intercitra, juga kepada mahasiswa magang di VDECserta beberapa kampus yang sempat melakukan magang yang telahberkontribusi dalam bentuk kode atau testing level dalam semuaprojek BlueOxygen ini. Tanpa kalian semua, projek ini hanyalahsebuah projek personal.Terima kasih kepada tim IGOS di Ristek maupun di Depkominfo,Richard Higgins, dan Geoff Zeis. CIDA yang akhirnya maumensponsori percetakan buku ini. Kepada Sun Microsystem yangtelah menciptakan Java, yang merupakan teknologi yang bukanhanya elegan tetapi juga telah merubah banyak hidup orang.Ucapan khusus diberikan kepada papa dan mama di Sukabumi,banyak kata-kata tidak terucapkan yang merupakan misterikehidupan yang mungkin sampai hari ini belum dipecahakanpenulis, menjadi sumber inspirasi apa artinya sebuah hidup, danmungkin buku ini adalah salah satu bentuknya, walaupun mungkinbukan media yang cocok untuk mengatakannya.Juga kepada Endy Muhardin yang berkenan berkontribusi untukbab Spring.Jakarta, November 2006Frans Thamurafrans@blueoxygen.org ix
  9. 9. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC Daftar IsiSekilas Mengenai Buku dan Penulis ............................... ivKata Sambutan................................................................... vKata Pengantar ............................................................... viiDaftar Isi ............................................................................. xBab 1, Mekanisme Pengembangan dalam Java dari MVC sampai AJAX ................................................. 1- Politik Sekitar MVC ................................................................................3- Teknologi IoC ..........................................................................................7- MVC dalam Solusi Java untuk Web ......................................................10- Dari MVC ke WARS, dilanjutkan dengan AJAX..................................12- Jenis-Jenis MVC ....................................................................................13- AJAX dan MVC ....................................................................................14- Kesimpulan ............................................................................................18Bab 2, Berkenalan dengan Teknologi Viewer dalam MVC Compile Time vs Run Time ........................................... 19JSP, Servlet dan Turunannya. ...................................................................23Bekerja dengan Velocity ..........................................................................24JasperReport dan iReport .........................................................................30JFreeChart dan Ceworlf ...........................................................................33Mondrian dari Pentaho.............................................................................33Bab 3, Berkenalan dengan Hibernate untuk Solusi Model pada MVC ...................................................................... 37x
  10. 10. Seri Enterprise OpenSourceBerkenalan dengan Hibernate Tools. .......................................................39Membuat Object Mapping Pertama .........................................................43Menjalankan Objek Hibernate .................................................................51ORM dengan Relationship.......................................................................53Implementasi DBUnit sebagai ETL .........................................................60Pengembangan Hibernate Lanjutan .........................................................63Bab 4, Pemograman MVC dengan Controller WebWork/Struts 2 ......................................................... 65Sekilas Mengenai WebWork/Struts2........................................................66Bagaimana WebWork Bekerja .................................................................67Membuat Aplikasi MVC dengan Result JasperReport ............................73Membuat Aplikasi MVC dengan Result Chart menggunakan JFreeChart ..............................................................................................74Implementasi Validasi pada WebWork - Standard ...................................75WebWork Lanjutan - Interceptor .............................................................77Bab 5, Pengembangan dengan IoC Menggunakan Spring Framework ......................................................... 80Mengapa IoC Penting dalam Aplikasi?....................................................80Sekilas Tentang SpringIDE ......................................................................92Menginstall SpringIDE ............................................................................93Bekerja dengan SpringIDE ......................................................................93Hubungan Hierarki dalam SpringIDE ...................................................100Bekerja dengan XML Editor (Exadel) ...................................................103Bab 6, Membuat Aplikasi Web CRUD dengan Cimande........................................................... 107Sekilas Tentang Projek Cimande. ..........................................................108Logika CRUD Mengacu pada Skema Cimande ....................................110 xi
  11. 11. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCBab 7, Implementasi User Management dengan Filter dan Session ......................................................... 121Memilih Session atau Cookies?. ............................................................121Berkenalan dengan Filter .......................................................................122Membuat Aplikasi dengan Filter dan Session........................................126Kesimpulan ............................................................................................130Bab 8, Manajemen Organisasi dengan BlueOxygen Cimande .................................................. 131User Management pada Cimande. .........................................................134Module Management Cimande ..............................................................135Mekanisme Workspace Explorer ..........................................................137Bekerja dengan Descriptor .....................................................................138Membuat Workspace Explorer Sendiri ..................................................138Membuat Role........................................................................................141Membuat Site .........................................................................................141Membuat Role-Site ................................................................................141Bab 9, BlueOxygen Postila, Solusi POS dengan Swing dan Hibernate ................................................... 149Sekilas Mengenai JavaPOS....................................................................149Sekilas Tentang BlueOxygen Postila .....................................................152Postila dan Netbeans ..............................................................................154SessionFactory dalam Postila ................................................................159Action pada Swing .................................................................................160Bab 10, Mengembangkan Aplikasi Berbasis SOA dan Memperkenalkan PASIR ............................................ 166Object Wrapper ......................................................................................173Mengembangkan Web Services Sendiri.................................................176xii
  12. 12. Seri Enterprise OpenSourceMengembangkan SOAP dengan Eclipse Calisto ...................................178PASIR, SOA Versi Indonesia .................................................................189Lampiran A, Berkenalan dengan Java SDK dan variannya ...................................................................... 191Sun Java SDK ........................................................................................191Instalasi Sun Java SDK ..........................................................................192Instalasi Sun Java SDK di Linux ...........................................................193Bea JRockIt ............................................................................................194Instalasi Bea JRockIt di Linux ...............................................................196IBM Java SDK .......................................................................................196Jikes........................................................................................................197Lampiran B, Memulai Pemogramana Berbasis Java dengan Eclipse IDE .................................................... 199Sekilas Mengenai Eclipse ......................................................................199Rich Client Technology .........................................................................202Menginstall Eclipse IDE ........................................................................204Memulai Bekerja dengan Eclipse ..........................................................207Memulai Projek Java..............................................................................209Membuat Aplikasi Java Pertama ............................................................215Mendebug Aplikasi Java ........................................................................219Memulai Projek WebWork (Metode 1) menggunakan Eclipse IDE Standar .............................................................................224Memulai Projek WebWork (Metode 2) menggunakan Eclipse Calisto .....................................................................................227 xiii
  13. 13. Seri Enterprise OpenSource BAB I Mekanisme Pengembangan dalam Java dari MVC sampai AJAXJava memang tidak lepas dari kata Sun, sang penciptanya. BerkatSun pula dan diikuti dengan gelombang Free Software palinghot abad ini yaitu Linux, telah membuat Java yang merupakanteknologi terbuka didunia pemograman bertransformasi secarasangat cepat.Java yang semula diciptakan untuk membuat aplikasi yangberjalan di browser, tetapi karena performancenya sangat jelek,telah berevolusi menjadi sebuah solusi untuk server. Dimanabundle semua teknologi berbasis Java ini lebih sering disebutJ2EE, singkatan dari Java 2 Enterprise Edition. Resmi tahun2005, Sun mengganti kata J2EE menjadi Java EE, karena tidaklah bagus Java terus menerus versi 2, setelah lebih dari satudekade menyandang kata itu. Padahal sebenarnya saat ini Javatelah memasuki versi 5.0, sehingga bundle Java untuk solusiyang lebih komplek juga berganti nama menjadi Java EE 5.0Implementasi Java EE ini ternyata sangat beragam, karenadidalam spesifikasi Java EE terdapat banyak sekali teknologiyang siap pakai seperti servlet, JSP, JSF, EJB, JMS atau JCA. JavaEE adalah merek dagang dari Sun Microsystems, sehingga untukinformasi lebih lanjut mengenai Java EE, dapat mengunjungiwebsitenya di http://java.sun.com.Implementasi dilapangan Java EE memerlukan container ataumiddleware, sehingga setiap objek-objek yang dikembangkandapat dijalankan didalam container tersebut, termasuk jugapengelolaan objek dilakukan oleh container tersebut. Beberapa 1
  14. 14. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCimplementasi container Java EE adalah JBoss, Jonas, Weblogic,Websphere atau Glassfish. Umumnya Java EE yang disebutkanadalah full stack Java EE container.Ternyata banyak sekali kebutuhan yang tidak memerlukan fitur-fitur Java EE yang sangat banyak tersebut, yang mana umumnyamemerlukan hanya fitur yang berhubungan dengan Web,teknologi Java EE yang hanya berurusan dengan Web ini disebutservlet, singkatan dari server applet. Sebuah container JavaEE yang hanya berisikan servlet ini disebut servlet container,implementasi dilapangannya adalah Tomcat dari Apache, Jetty,Resin dari Caucho, atau yang commercial Websphere Express,JRun dari Adobe. Geronimo dari Apache atau JBoss ASmenggunakan Tomcat sebagai servlet containernya. Sehingga,setiap aplikasi yang dikembangkan di atas Tomcat, umumnyadapat berjalan tanpa modifikasi bilamana dideploy di Geronimoatau JBoss AS.Turunan teknologi servlet ini ada bermacam-macam, tetapi yangdistandarisasikan adalah JSP dan JSF. Sedangkan yang dibahasdibuku akan membahas turunan dari teknologi servlet ini yangtidak distandarisasi di JCP, dimana penulis merasakan kehebatanteknologi non JCP ini untuk pengembangan.Penulis merasa perlu menjelaskan teknologi turunan ini, karenateknologi tersebut terutama Velocity, telah bertransformasi darisekedar teknologi untuk web menjadi teknologi code generator,yang artinya kode yang kita kembangkan akan menghasilkan kodebaru baru lagi, atau dengan kata lain aplikasi yang menghasilkanaplikasi lain.Walaupun mekanisme tersebut tidak dibahas dalam buku ini,mekanisme ini akan menjadi salah satu teknologi unggulan.Dimana mekanisme ini akan menjadi salah satu fitur berikutnya.2
  15. 15. Seri Enterprise OpenSourcePolitik Sekitar MVCDengan semakin kompleksnya dan naiknya popularitas servletini, dan juga merupakan salah satu teknologi yang menjadijembatan antara JavaBean dengan Enterprise JavaBean atauteknologi lainnya didalam Java EE, seperti JTA, JCA, ataukomponen didalam Java SE.Hal ini juga berhubungan dengan teknologi Java yang miripdengan Smalltalk yang dalam era tahun 80-an sangat populer,terutama teknologi MVCnya, membuat dunia Java jugadipenuhi banyak teknologi manajemen pengembangan yangmengimplementasikan servlet, artinya sebuah teknologi berbasisMVC untuk web.Apalagi setelah tim Smalltalk yang sekarang semuanyabermarkas di IBM, membuat Eclipse, dengan teknologi SWTyang merupakan turunan dari Smalltalk, telah membuat Java danSmalltalk menjadi satu. Tentu saja primadona Smalltalk masukkedalam Java.Sebenarnya sebelum MVC muncul, dan saat web programmingmeledak, yang dipelopori oleh Microsoft dengan ASPnya,kemudian disusul oleh PHP yang multiplatform dan sangat cepat,membuat tim Sun membuat sebuah teknologi JSP, yang manabekerja mirip dengan teknologi web scripting ASP atau PHP,tetapi membawa sifat awal dari Java, yaitu OOP.JSP yang merupakan turunan dari servlet, memungkinkan sebuahHTML diberi kode Java dan berinteraksi dengan object didalamcontainer Java EE. Metode ini dikenal dengan pemogramanmodel 1, yang mana dalam dunia nyatanya, karena JSP setiap kalidieksekusi harus dirubah menjadi sebuah class Java, membuatJSP dianggap the dark side of Java didunia Web programming. 3
  16. 16. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC Pengembangan Java Model 1 dengan JSPDengan sifat JSP yang dianggap buruk, dan membuatsampah didalam container Java EE, sedangkan implementasipemogramanan berbasis Web dengan servlet adalah sangat rumitdan tidak semudah kompetitornya yaitu ASP dan PHP. Membuatprogrammer Java harus berpikir keras untuk membuat Javamenjadi sebuah teknologi yang layak dipakai didunia Web.Akhirnya tepatnya sekitar tahun 1996-an, muncul sebuahprojek yang mengacu pada model 2 yaitu MVC, model yanggetol dipopulerkan oleh tim Smalltalk, jauh sebelum Java lahir,tepatnya sekitar tahun 1988.Tahun 1996-an, lebih tepat diakhir tahun 2000, Apache yang saatitu sedang mulai melakukan hosting projek Java, dengan benderaJava, tetapi harus mengganti menjadi Jakarta, karena kasus merekdagang. Memiliki sebuah subprojek baru yang bernama Struts.Struts yang berupa controller memerlukan JSP sebagaipresentation layernya. Struts bekerja dengan EJB untukmodelnya, sehingga dalam format MVC, M diisi oleh EJB, Cdiisi oleh Struts, dan V diisi oleh JSP.Walaupun setelah itu Apache mengeluarkan teknologi yangmerupakan jawaban dari dunia hitam JSP dengan nama Velocityyang akan dibahas dibab berikutnya, serta beberapa teknologi4
  17. 17. Seri Enterprise OpenSourceuntuk mengganti EJB khusus untuk non distributed computing,seperti iBatis. Bersamaa dengan itu, searah dengan ledakan Javadidunia. Lahirlah gerakan framework yang merupakan sebuahnilai tambah terhadap servlet atau lebih tepatnya Java EE.Struts adalah projek MVC Java pertama yang secara langsungtelah merubah peta pasar Java di dunia. Adopsi Struts hampirdisemua solusi berbasis Java, mulai dari perusahaan kecil sampaibank-bank kelas dunia mengadopsinya.Pendekatan Struts yang implementasinya mirip dengan EJB,memerlukan banyak class untuk sebuah eksekusi aplikasi Web,telah membuat seorang jenius didunia Java bernama RichardOberg mengeluarkan WebWork, dengan konsep HMVC,Hierarhical MVC. Richard Oberg ini adalah salah satu dari orangyang mewarnai dunia Java dengan teknologi populer sepertiJBoss dan Xdoclet. Yang terakhir, Xdoclet, merupakan hackingtools paling populer didunia Java. Yang memungkinkan teknologiJava dapat dibuat menjadi apa saja, dengan hanya memanagesebuah comment didalam class.Sayangnya Struts yang diciptakan Craig, ditinggalkan sangempunya tanpa sempat mentransfer ide beriliannya, Craigakhirnya mengembangkan sebuah spesifikasi standard berbasisMVC juga dengan nama JavaServer Faces. Yang saat ini sedanggetol dipromosikan oleh Oracle, Sun dan JBoss. Dimana merekasemua adalah leader dari spesifikasi ini, 5
  18. 18. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC MVC dalam JavaPerang Struts vs WebWork ini adalah perang Java paling menarik,karena WebWork 2.3 diganti namanya menjadi Struts 2.0. Kokbisa? Padahal secara projek mereka tidak berhubungan. Babberikutnya akan membahas apa itu WebWork.Teknologi MVC ini sebenarnya tidak hanya ada didunia webatau Java EE saja, sebenarnya didalam Java standard yang lebihdikenal dengan Java SE, telah ada teknologi berbasis MVC,yaitu Swing. Teknologi ini konon diciptakan oleh tim IBM, yangnotabene merupakan perusahan pelopor MVC, karena akusisiSmalltalk tadi.Swing yang berjalan diteknologi AWT, merupakan MVC juga,hampir semua objeknya seperti JTable adalah MVC. Malahbeberapa sumber mengatakan hal ini terjadi karena IBM sangatyang terdapat tim Smalltalk didalamnya, telah berkontribusilebih dari 80% terhadap Swing. Ini yang menjadi alasan mengapaSwing sangat MVC.Jadi bilamana ingin jadi programmer Java, kata MVC adalah halbiasa. Malahan didunia Java yang terkenal dengan solusi yangselalu memikirkan arsitektur dan kekuatan container, MVC telahmemiliki banyak turunan, yang berbentuk pola yang lebih seringdisebut dengan pattern.6
  19. 19. Seri Enterprise OpenSourceBuku ini sebenarnya tidak mendalami Java EE lebih lengkap,tetapi lebih condong penekanan pada MVC dan turunannya, sertatools pendukung yang memungkinkan pengembangan aplikasiMVC lebih efektif.Teknologi IOCStruts, Webwork, yang kemudian diikuti oleh Tapestry, JSF,Stripes, akhirnya muncul SpringMVC. Semua ini adalahteknologi yang memungkinkan pemograman memisahkan antaradata, business logic dan presentation layer dalam sebuah polastandar bernama MVC.Malah SpringMVC yang berdiri diatas IOC (Injection of Control)atau DI (Depedency Injection), telah membuat framework-framework MVC ini dapat saling dipertukarkan. Sebagai contohsebuah solusi menggunakan model EJB3, kemudian digantidenagn Hibernate saja, atau solusi lain dengan TopLink. Hal inimemungkinkan dengan IOC.IOC merupakan sebuah mekanisme yang secara awam adalahsebuah mekanisme memanggil sebuah objek tetapi tanpainisialisasi.Revolusi IOC ini yang semula diciptakan karena EJB yangmemang diciptakan untuk komputasi terdistribusi, dan tidakcocok untuk projek yang berbudget kecil, bertransformasimenjadi sebuah layer baru dalam pemograman, terutama sebagaiperekat antara model, viewer dan controler dalam implementasiaplikasi berbasis MVC didunia Java khususnya.Teknologi IOC sebenarnya telah lama ada di dunia Open SourceJava, tetapi balik lagi, hanya beberapa yang bertahan, diantaranyaAvalon dari Apache yang discountinue, terus ada JBoss MicroKernel yang merupakan engine inti dari JBoss. Buku ini hanyamembahas Spring. 7
  20. 20. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCIOC ini sebenarnya menarik diikuti, dan untuk beberapakasus sangat bagus digunakan dalam solusi, terutama mengisiinterkoneksi antara M, V dan C dalam pemograman berbasisMVC. Yang mana dalam buku ini IOC lebih ditekankan padaintegrasi antara WebWork dan Hibernate yang akan dibahas diBab 5 sampai akhir buku ini.Definisi IOC, untuk lebih lengkap dapat mengunjungi http://martinfowler.com/articles/injection.html.Buku ini memposisikan IOC sebagai sebuah solusi yang menarik,terutama bagi mereka yang menjalankan solusi berbasis Cimandepada JBoss. Artinya dapat dikatakan menggunakan dua teknologiIOC yaitu sebagai wrapper antara Controller dan Model dalamMVC, serta sebagai container engine pada JBoss.Reposisi ini, apalagi setelah JBoss sangat aktif untuk menjadipemain utama dalam industri EJB3, yang mana EJB3, terkesansangat Hibernate, walaupun sebenarnya untuk mengembangkanEJB3 dapat menggunakan saingan Hibernate seperti Toplinkdari Oracle, atau Kodo dari Bea. Yang semuanya Open Source,kecuali TopLink comercial.Dipasaran terjadi persaingan antara Spring melawan JBoss, sebabbeberapa berita dari tim Spring, yang berhasil mengembangkansebuah solusi yang lebih sering disebut dengan light developmentof Java, telah membuat Spring + Tomcat adalah solusi yangsangat ideal untuk production.Sedangkan JBoss yang menggunakan JBoss Microkernel sebagaiIOC engine, yang merupakan engine didalam JBoss AS dan jugawrapper solusi antara JSF dan Hibernate, dalam produk merekabernama JBoss Seam.8
  21. 21. Seri Enterprise OpenSourceMembuat posisi JBoss AS + JBoss Seam mirip dengan Springstack. Dimana buku yang membahas Spring MVC dan JBossSeam akan dikeluarkan setelah buku ini direlease.Yang lebih menarik lagi, buku ini adalah akan menjelaskan versiyang berbeda dengan posisi dari perang JBoss dengan Spring. Arsitektur SpringBuku ini sebenarnya lebih menekankan integrasi frameworkMVC antara WebWork dengan Hibernate menggunakan Spring.Dimana Seam menggunakan JSF dan Hibernate. SedangkanAlfresco menggunakan JSF, Hibernate dengan Spring.Semua merupakan kombinasi yang berbeda, dan tinggal pembacamenentukan solusi mana yang lebih sesuai.Sebenarnya ke-3 pilihan solusi ini dapat diintegrasikan, yaitudengan merubahnya menjadi solusi berbasis SOA, yang manaakan menjadi topik bahasan pada bab 9. 9
  22. 22. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCReposisi Spring yang berawal dari sebuah IOC (Spring Bean)menjadi sebuah solusi yang lengkap membuat Tomcat + Springmemiliki teknologi yang alternatif dari JBoss AS. Padahalteknologi Spring ini berjalan diatas JBoss.Bentuk persaingan ini mirip dengan persaingan Windowsdengan Java, yang saat ini terjadi. Kita tahu Java berjalan diatasWindows.MVC dalam Solusi Java untuk WebDalam pengembangan MVC, sebenarnya kita dapat melakukankombinasi berbagai teknologi untuk membuat solusi berbasisMVC. Jadi jangan berharap dengan pakai Struts saja kita dapatmengimplementasikan MVC.Alfresco (http://www.alfresco.org), merupakan solusi digitallibrary yang mengimplementasikan MyFaces, Spring, Hibernate,digabung dengan teknologi JCR untuk penyimpanan file, Lucenseuntuk search engine. Arsitektur AlfrescoJBoss Seam dari JBoss, merupakan solusi fondasi Web 2.0, yangmengintegrasikan MyFaces, Hibernate, dan JBoss Micro Kernelsebagai IOCnya.10
  23. 23. Seri Enterprise OpenSource Arsitektur JBoss SeamSedangkan produk dalam negeri Indonesia, BlueOxygenCimande, menggunakan WebWork, Spring dan Hibernate sebagaikombinasi MVCnya. Arsitektur BlueOxygen CimandeSedangkan dari Oracle, setelah Mike Keith, sang penciptaTopLink bekerja sama dengan Spring, teknologi MVC Oraclejuga mengadopsi stack serupa Alfresco. Arsitektur Oracle ADF (Fussion Middleware)Seperti yang dijelaskan disubbab sebelumnya, ke-4 teknologi iniadalah memiliki kerangka awal yang sama, tetapi memberikankombinasi yang berbeda.Malah reposisi Spring yang menyaingi JBoss Micro Kernel,memungkinkan Cimande suatu hari bersaing dengan JBoss AS. 11
  24. 24. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCApakah itu memungkinkan?Dari MVC ke WARS, dilanjutkan dengan AJAXTahun 2005, MVC telah berkembang dengan lahirnya produkOpen Source untuk workflow, seperti Shark dari Enhyrda, JBPMdari JBoss, serta teknologi rule management seperti Mandarax,Drools (JBoss), serta diadopsinya teknologi expert systemkedalam Java, yang memungkinkan setiap MVC bukan hanyamengakses model data saja, tetapi telah memelukan sebuahinterupsi tambahan seperti status pekerjaan dalam workflowrepository, serta memungkinkannya setiap proses harus melaluiperaturan yang disisipkan dalam kode kita, menggunakan rulescript. Arsitektur AJAXYang lebih hebatnya, workflow dan rule scriptnya ini dapatberubah dan bekerja terpisah secara dinamis diluar MVC.Mekanisme ini pernah dicetuskan dengan sebutan WARSsingkatan dari Workflow, Action, Result and State, yangsebenarnya sebuah nama baru dari MVC+W. Maklum orang Javapaling suka nama baru, konon biar keren dan setiap yang keren-12
  25. 25. Seri Enterprise OpenSourcekeren ini memiliki daya jual lebih. Jadi kalau mendengar kataWARS, akan terasa berbeda, sebenarnya itu adalah MVC yangdidalam memiliki teknologi workflow.Mekanisme yang sama terjadi dalam dunia Javascript, yang manasetiap interaksi dengan server dengan XMLHttp, disebut AJAX.Jenis-Jenis MVCKembali ke tahun 2000-an, sebenarnya perang MVC terjadiantara Struts dengan WebWork, yang mana WebWork lebihmengutamakan kemudahan, dengan implementasi teknologidispatcher, sedangkan Struts yang bernaung di Apache, yangmana Apache merupakan nama yang paling hot dalam dunia OpenSource, telah membuat Struts menjadi framwork untuk MVCpaling populer saat itu. Secara marketing, terlihat WebWork yangmengatakan dirinya pull MVC, sedangkan Struts adalah pushMVC, tampak terlihat berbeda. Merger WebWork dengan Strutsditahun 2005, telah membuat kombinasi yang menarik sekali.Saat itu, orang beranggapan Struts dan WebWork adalah MVC,tetapi dengan berkembangnya waktu, dan semakin banyakrekan-rekan kita diseluruh dunia yang membuat frameworkyang mungkin saja berbasis pada framework yang sudah ada,tetapi dengan tambahan fitur, seperti setelah Struts muncul JSF,sedangkan setelah WebWork lahir Stripes. Stripes, walaupunbelum sehandal WebWork, terlihat mengimplementasikanannonation didalamnya, yang konon tim WebWork sedangmencari cara bagaimana mengimplementasikan annonation yangmudah didalamnya.Teknologi mirip MVC yang khusus untuk XML adalah Cocoonyang juga dari Apache, dilanjutkan dengan Turbine, lalu lahirlagi komponen sejenis seperti Tapestry.Alhasil penulis mendapatkan untuk memudahkan pemilihan 13
  26. 26. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCMVC, diperlukan pemisahan antar MVC, baik MVC yangberbasis component atau MVC yang berbasis action.MVC tipe lain adalah yang berbasis component adalah yangbekerja seperti halnya pemograman event driven, setiap tagmemungkinkan dibuat komponennnya, teknologi yang sangatserius dengan model ini adalah JSF. Yang mana implementasiJSF ini sebenarnya merupakan adopsi teknologi Swing kedalamteknologi berbasis Web.Sedangkan teknologi MVC berbasis action, adalah adopsiimplementasi yang mengacu pada request dan responsenyateknologi HTML, teknologi ini dilead oleh WebWork, yang manasetiap pengembangan mengadopsi page-page dari HTML.Tahun-tahun kedepan sepertinya akan terjadi integrasi antaraframework ini, seperti Struts 2.0 yang merupakan projekintegrasi dari Struts dan WebWork, ternyata mulai memasukanunsur komponen kedalamnya, dengan memasukan JSF sebagaikomponennya.Jadi dapat dikatakan, tahun-tahun kedepan akan lahir MVC yangmengadopsi kedua teknologi action dan component. Ini tentusaja evolusi MVC baru lagi, yang selama lebih dari 10 tahunyang dilakukan komunitas Open Source.Dari semua ini yang menarik adalah teknologi web yang tidakOpen Source malahan tidak dapat bertahan, seperti WebObjectdari Apple, merupakan teknologi Java berbasis komponenyang sangat bagus, tetapi sayang karena tidak Open Source danberjalan diatas Mac saja, serta focus Apple yang bukan di Java,membuat produk ini tenggelam.AJAX dan MVCSearah dengan semakin cepatnya Internet, serta keterbatasan14
  27. 27. Seri Enterprise OpenSourceHTML untuk memungkinkan terjadi sebuah aplikasi berbasisWeb yang interaktif. Lahirlah sebuah teknologi bernama AJAX,yang mana populer setelah Google meluncurkan Gmail, yangmerupakan free email yang bekerja sangat cepat. Pengembangan Web Classic vs AJAXAJAX yang merupakan singkatan dari Asyncrhonous Javascriptand XML, merupakan sebuah mekanisme yang memungkinkanproses Web dipisah antara server dan client, ini disebabkanPC client yang diasumsikan sudah terlalu cepat, dan mubajirbilamana kita menggunakan teknologi berbasis MVC sekalipun.Karena ternyata dengan menggunakan AJAX, sebuah penekananbeban server dari 30% sampai 60% dapat terjadi pada serveryang sama. 15
  28. 28. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC Metode Request dan Response aplikasi Classic / Non AJAXYang lebih hebat lagi, AJAX memungkinkan kita mengaksesbeberapa data resource tanpa perlu melakukan refresh pagedidalam browser, yang tentu saja ini merupakan teknologiinteraktif yang bagus sekali, terutama untuk mereka yangmemerlukan analisa dan proses yang cepat. Metode Request dan Response AJAXKehebatan AJAX ini terus berkembang, yang malahan dipercayamerupakan teknologi yang akan memungkinkan kita dapatbekerja untuk melakukan pekerjaan harian perkantoran tanpa16
  29. 29. Seri Enterprise OpenSourceperlu menginstall aplikasi Office Automation seperti OpenOfficeatau Microsoft Office.Untuk membuat aplikasi AJAX sebenarnya tidaklah sulit, karenakomunitas AJAX telah banyak membuat sebuah wrapper atauscript library yang siap pakai, seperti Yahoo dengan Yahoo UI,Google dengan GWT, DojoToolkit, atau JSON, ataupun DWRbuatan Joe Walker yang memungkinkan object Java dapatberinteraksi dengan object Javascript. Mekanisme Pengembangan AJAX dengan DWRAlhasil dari semua evolusi internet ini, dalam waktu dekatakan muncul duo MVC, yaitu MVC diserver serta MVC untukpemorsesan XML dengan AJAX.Dengan merger antara MVC berbasis komponen dan action,serta integrasi MVC baru ini kedalam teknologi AJAX, membuatsebuah pemograman semakin kompleks, interaktif dan lebihmudah didebug.Penulis sedang mencoba mengembangkan teknologi duo MVCini dalam project dibawah Cimande dengan nama Cimande Thin,yang mengutilisiasi DWR serta fitur WebWork untuk validasiberbasis AJAX. Diharapkan dalam waktu dekat akan muncul 17
  30. 30. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCresult management dari WebWork yang berbentuk AJAX. Saatini, fitur ini sedang dikembangkan oleh tim DWR untuk DWR2.0.Jadi apakah anda akan berpartisipasi sebelum ini terealisasi ataumenunggu semua ini selesai?KesimpulanPenulis melihat dengan munculnya teknologi yang bermacam-macam dengan nama yang aneh-aneh, sebenarnya merupakansebuah bentuk evolusi dari mekanisme pengembangan dilayersetelah middleware, dimana untuk middleware, kita hanya perlumengikuti standar Java EE, semua sudah selesai.JSF merupakan barang baru dan sedang dalam pembuktiankehandalan, bilamana bila dikombinasikan EJB3, telah membuatkharisma Java EE yang semua diinjak-injak oleh para programmerunderground pengikut aliran light dapat muncul kembali.Apalagi persaingan EJB3 dengan teknologi IOC yang mulaiterjadi membuat solusi stack Java EE menjadi agak memusingkanbagi orang awam untuk diikuti.Masuknya AJAX, yang membuat teknologi Java yang dianggaprakus resource, menjadi dapat ditekan performancenya, menjadisampai hanya tinggal 1/3 saja, dan hebatnya dari AJAX ini,langsung diterima oleh semua pihak yang berseteru.Buku ini sebenarnya akan menjelaskan solusi Java untuk solusienterprise yang lain, yang mana, diharapkan dapat memberikanmasukan bagi para pembaca untuk mengkaji, serta memahami,mengapa banyak pihak yang protes karena JSF itu sulit, EJBdianggap sebagai teknologi bagi mereka yang memiliki uanglebih untuk dihamburkan, karena biaya pengembangannya terlalutinggi dibandingkan solusi lainnya.18
  31. 31. Seri Enterprise OpenSource BAB II Berkenalan dengan Teknologi Viewer dalam MVC Compile Time vs Run TimeDidunia MVC, Viewer yang merupakan bagian khusus untukmenangani layer presentation memiliki beberapa teknologiseperti JSP yang standar dan Velocity dari Apache (http://jakarta.apache.org), serta turunan Velocity yang lebih lengkap dan richyaitu Freemarker (http://www.freemarker.org). Semuanya adalahturunan dari servlet.JSP yang terkenal dengan sebutan the darkside of Java, adalahsebuah teknologi yang bekerja dengan cara mengkompilasi setiapscript JSP menjadi class. Metode ini disebut dengan compile timetechnology.Teknologi ini kelebihannya adalah langsung jalan tanpa perludikompilasi, tetapi tentu saja kelemahannya langsung terlihat yaitumembuat sampah. Bilamana kita membuat sebuah file, misalnyaindex.jsp akan menghasilkan 2 file untuk dapat dijalankan yaituindex.java yang merupakan turunan dari servlet dan index.class, binary sebenarnya yang dijalankan. Dimana index.javaadalah source code dari hasil mapping index.jsp kedalam standarservlet.Agara sampah tidak terlalu besar dan membuat performance servermenurun, ada cara untuk mengatasi kelemahan JSP tersebut,disarankan mengimplementasikan taglib, sehingga tag-tag didalamJSP telah terlebih dahulu dicompile menjadi bytecode, sehinggaproses didalam JSP menjadi lebih cepat. 19
  32. 32. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCSayangnya taglib ini membuatnya tidak semudah yangdibayangkan, dan merupakan teknologi yang kurang populer.Beberapa taglib yang standar seperti JSTL telah dikeluarkan untukmemanipulasi expression didalam JSP, sehingga pemogramanmenjadi lebih berstruktur. Tetap saja, metode ini tidak semua dantidak seflexible melakukan pemograman langsung di JSPnya.Apalagi di Indonesia, yang projek terkadang diserahkan langsungkepada programmer junior atau project manager yang tidakmengerti arsitektur Java secara keseluruhan, membuat programmeryang sudah merasa enak dengan JSP, langsung saja buat didalamJSP tersebut. Alhasil terjadi sebuah pemograman yang bukansaja kotor tetapi sangat sulit ditrace. Walaupun Eclipse WTPsejak versi 1.5 memungkinkan mendebug JSP, tetap saja dalamimplementasinya JSP harus diconvert menjadi servlet. Error akanmuncul bilamana menggunakan include didalam JSP pada WTP.Ada pendekatan terbaru dari JSP yang dikembangkan oleh Craigsang pembuat Struts, dengan teknologi JSF, yang memungkinkanimplementasi menggunakan JSP lebih rapi.JSF ini dianggap kartu as dari para programmer pro JCP, karenaJSF ini yang dikembangkan oleh juga Oracle, telah menjadi barangmarketing dunia Java yang konon lebih flexible. Tentu saja inistrategy untuk melawan komunitas Open Source yang telah lebihdahulu berkuasa, yaitu Struts.Kelemahan JSP ini yang kemudian dibaca oleh tim Apachedalam project Jakarta, dengan mengeluarkan Velocity, yang manaproject ini mengambil ide dari tim WebMacro, yang merupakansebuah teknologi berbasis servlet, yang mengeluarkan layoutmanagementnya menjadi sebuah file biasa. Proses ini ternyatamembuat proses layouting menjadi lebih cepat jauh dari JSP. Yangsecara mudahnya adalah karena tidak adanya proses compile on20
  33. 33. Seri Enterprise OpenSourcethe fly dari file code.Velocity dapat dikatakan servlet yang diextend, sehingga yangbiasanya untuk membuat layout harus membuat script satu persatudalam baris code servlet, menjadi tidak perlu dilakukan lagi. Malahdengan adanya library untuk HTML Designer seperti Dreamwaver,membuat layout menjadi lebih sangat productif.Dengan Velocity, implementasi layouting dan coding dapat dipisah,sehingga dalam pemograman lebih komplek dalam bentuk timyang lebih besar, tim pengembang template Velocity dan servletnyadapat dipisahkan.Sayangnya proses untuk membuat sebuah object dapat diparsingdidalam Velocity memerlukan keahlian khusus, walaupun tidaksulit. Hal ini karena Velocity bekerja seperti halnya sebuahkeranjang sampah, setiap object yang telah diproses hanya perludi masukan kedalam contextnya Velocity, dan langsung dapatdiparsing didalam template. Yang mana mekanisme kerjanya akandibahas setelah ini.Ternyata proses pengiriman object kedalam keranjang ContextVelocity, telah dipahami sekali oleh para programmer OpenSource berbasis Java, sehingga lahirnya project VelocityToolsyang memisahkan object pemrosesan dan proses pemasukan objectkedalam keranjang Context Velocity dengan melakukan integrasidengan Struts.Ternyata mekanisme ini diadopsi juga oleh WebWork, yang saatitu merupakan saingan Struts. Management result dari WebWorkmemungkinkan setiap object yang terexecute, akan secaralangsung dimap kedalam Velocity. Malah integrasi WebWorkdengan Hibernate via Spring (yang semuanya akan dibahassetelah bab ini), memungkinkan semua model dalam Hibernatedilempar ke Velocity secara otomatis. Alhasil, mekanisme ini 21
  34. 34. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCterus dikembangkan, dan saat ini bukan hanya Velocity yangdapat diproses menjadi viewer layer dalam pemograman MVC,tetapi telah ditambahkan teknologi lainnya, seperti JasperReportuntuk reporting, XML, JFreeChart untuk charting. Yang lebihmenarik lagi, ternyata JSP juga dapat digunakan menjadi alternatifpresentation layer, yang bekerja sama dengan Velocity.Alhasil dengan kembalinya JSP sebagai presentation layer,ternyata secara team work, telah terjadi pergeseran mekanismepemograman, programmer Java yang menggunakan integrasidengan model MVC, telah lebih solid bukan hanya secarateknologi tetapi secara team work, alhasil karena mekanismeintegrasi dan improvement yang dilakukan disetiap layer, baik ituoleh tim M, V ataupun C. Serta lahirnya teknologi caching yangdapat diimplementasikan disetiap layer, membuat sebuah teknologiyang secara teori lebih kompleks dan lebih sulit dipelajari, ternyatamenjadi selain lebih mudah dipelajari, tetapi juga lebih cepat untukbeberapa kasus.Pengalaman penulis yang telah merasakan kehebatan sebuahmekanisme pemograman berbasis MVC, penulis yang semulamenggunakan teknologi JSP memerlukan minimum 2 minggu,dengan MVC dapat dikerjakan dalam 2-5 hari.Bab-bab setelah ini akan mendalami bagaimaan interaksi antaraM, V, dan C didalam model pengembangan MVC, menjadi sebuahkekuatan.Yang pasti dengan adanya MVC, secara tidak langsung kita telahberubah dari sebuah pemogramanan yang langsung didalam HTMLmenjadi sebuah mekanisme pemograman yang berbasis run time,yang mana bagi para programmer embeded HTML, mekanismeini terkadang menyebalkan, karena kita harus mengcompile duluuntuk menjalankannya.22
  35. 35. Seri Enterprise OpenSourceTetapi teknologi ini telah diatasi juga dengan lahirnya teknologiautodeploy, yang memungkinkan melakukan semua binary objectkita dihapus dan ditambahkan tanpa perlu server direstart terlebihdahulu. Mekanisme ini malah telah berkembang menjadi sebuahpengembangan berbasis modular. Diantaranya adalah dalampemograman berbasis Portlet, memungkinkan dua archive Javadideploy dalam satu container menjadi satu aplikasi terintegrasi.Untuk lebih jelasnya, mekanisme JSP dan Velocity akan dibahassetelah ini, yang mana, penulis menggunakan Tomcat sebagaiJava EE containernya.JSP, Servlet atau TurunannyaBilamana kita perhatikan aplikasi yang dikembangkan dengan JSPlebih mudah, karena tidak diperlukan membuat baris out.printlnuntuk membuat baris-baris HTML, yang mana merepotkan sekalibilamana dikembangkan menggunakan Servlet.Dengan JSP, setiap programmer dapat mengembangkanaplikasinya menggunakan HTML Designer, sehingga layoutHTML yang kompleks dapat diembed dengan perintah JSP. Inipekerjaan menyenangkan. Tetapi akan menjadi mimpi buruk dalampengembangan aplikasi Servlet.Sayangnya JSP itu adalah sebuah teknologi yang kotor, yangmembuat sampah di folder /work/Catalina/localhost/namacontext.Ini yang diyakini membuat JSP lebih lambat dari Servlet.Ada sebuah metode yaitu dengan menggunakan JSPC, untukmembuat JSP menjadi sebuah bytecode tanpa perlu membuatsampah-sampah didalam folder work.Selain itu JSP sulit sekali didebug. Karena JSP yang dibuat danhasil kompilasi JSP berbeda secara teknologi dan juga prosesdebugging hanya dapat dilakukan didalam Servlet yang dihasilkan 23
  36. 36. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCdari kompilasi JSP. Saat ini Eclipse dengan WTPnya telah memilikifitur debugging diatas JSP. Tetap saja kalau error didalam sebuahJava container, error baris berbeda dengan error pada baris di JSP.Mendebug dengan Eclipse dibahas dilampiran bab ini.Sehingga didapat bahwa diperlukan sebuah servlet yang dapatmembaca file HTML, sehingga programmer dapat menggunakanHTML designer untuk menghasilkan HTML, dan programmerdapat mendebug dan membuat bytecode yang efisien.Metode pengabungan HTML dengan Servlet ini dapat dilakukandengan mengextend Servlet menjadi sebuah teknologi yangmereplace perintah out.println. Didunia Open Source metodeini telah menghasilkan sebuah teknologi yang ampuh, jadi kitatidak perlu membuat lagi, karena teknologinya sudah bagussekali, teknologi gabungan ini semua disebut dengan Velocitydan FreeMarker.FreeMarker adalah sebenarnya Velocity yang dikembangkan lebihluas sehingga fitur-fiturnya lebih banyak dibandingkan Velocity,dimana Velocity sendiri sesuai dengan namanya ”kecepatan”, tidakmengutamakan fitur-fitur tetapi mengutamakan sebuah eksekusiyang lebih ramping sehingga cepat. Salah satu fitur FreeMarkeradalah kemampuan mengeksekusi taglib, dimana pada Velocityitu tidak memungkinkan.Velocity dapat didownload di website http://jakarta.apache.org/velocity, dimana Velocity adalah sub project Jakarta dari Apache,yang mana satu level dengan project Tomcat.Sedangkan FreeMarker dapat didownload dari http://www.freemarker.orgBekerja dengan VelocityUntuk menjalankan Velocity, masukan velocity-dep-1.4.jar kedalam24
  37. 37. Seri Enterprise OpenSourceWEB-INF/lib. Didalam distribusi Velocity memang terdapat 2 jar,yaitu velocity-dep-1.4.jar dan velocity.jar. Perbedaannya velocity-dep-1.4.jar lebih lengkap, karena memasukan beberapa projekApache lainnya seperti ORO dan Log4J.Isi dari VeloServlet selengkapnya adalah:package org.blueoxygen.book1.velocity;import java.io.IOException;import java.io.FileNotFoundException;import java.util.Properties;import java.util.Vector;import javax.servlet.ServletConfig;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.velocity.Template;import org.apache.velocity.context.Context;import org.apache.velocity.servlet.VelocityServlet;import org.apache.velocity.app.Velocity;import org.apache.velocity.exception.ResourceNotFoundException;import org.apache.velocity.exception.ParseErrorException;public class VeloServlet extends VelocityServlet{protected Properties loadConfiguration(ServletConfigconfig ) throws IOException, FileNotFoundException { Properties p = new Properties(); String path = config.getServletContext() .getRealPath(“/”); 25
  38. 38. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC if (path == null) { System.out.println(“ VeloServlet.loadConfiguration() : unable to “ + “get the current webapp root. Using ‘/’. Please fix.”); path = “/”; } p.setProperty( Velocity.FILE_RESOURCE_LOADER_PATH, path ); p.setProperty( “runtime.log”, path +“velocity.log” ); return p; } public Template handleRequest( HttpServletRequest request, HttpServletResponse response, Context ctx ) { String p1 = “Frans”; String p2 = “Harold”; Vector personList = new Vector(); personList.addElement( p1 ); personList.addElement( p2 ); ctx.put(“theList”, personList ); int i = 100; i = i *2000; Vector variableList = new Vector(); variableList.addElement(“”+i); i=i*250; variableList.addElement(“”+i); ctx.put(“variableList”,variableList); Template outty = null;26
  39. 39. Seri Enterprise OpenSource try { outty = getTemplate(”sample.vm”); } catch( ParseErrorException pee ) { System.out.println(”VeloServlet : parse error for template ” + pee); } catch( ResourceNotFoundException rnfe ) { System.out.println(”VeloServlet : template not found ” + rnfe); } catch( Exception e ) { System.out.println(”Error ” + e); } return outty; }}Sedangkan template sample.vm adalah<html><head><title>Sample Velocity page</title></head><body bgcolor=”#ffffff”><center><h2>Hello from BlueOxygen!</h2><i>Here’s the list of people</i><table cellspacing=”0” cellpadding=”5” width=”100%”> <tr> <td bgcolor=”#eeeeee” align=”center”> Names </td> </tr> #foreach ($name in $theList) <tr> <td bgcolor=”#eeeeee”>$name</td> </tr> #end <tr> <td bgcolor=”#eeeeee” align=”center”> Variables 27
  40. 40. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC </td> </tr> #foreach ($variable in $variableList) <tr> <td bgcolor=”#eeeeee”>$variable</td> </tr> #end</table></center></html>Diatas adalah salah satu sample dari mekanisme yangmemungkinkan mengembangkan aplikasi menggunakan HTMLDesigner sehingga menghasilkan HTML yang lebih enak dibaca,juga menggunakan Servlet sehingga ekskusi menjadi lebih cepat.Metode Velocity ini diyakinkan 4 kali lebih cepat dari pemogramanberbasis JSP.Perhatikan baris public class VeloServlet extendsVelocityServlet, ini menyatakan bahwa apllikasiSampleServlet bukan turunan dari Servlet yang telah dibahassebelumnya tetapi VelocityServlet, dimana VelocityServlet iniadalah turunan dari Servlet.Kemudian cari baris outty = getTemplate(”sample.vm”);, ini artinya memanggil file sample.vm, dimana sample.vm adalah sebuah HTML dengan embed velocity macro.28
  41. 41. Seri Enterprise OpenSource Output dari eksekusi dari VeloServletAdapun sebelum menjalankan VeloServlet, tambahkan barisberikut di web.xml<servlet><servlet-name>VeloServlet</servlet-name><servlet-class>org.blueoxygen.book1.velocity.VeloServlet</servlet-class><init-param> <param-name>properties</param-name> <param-value>/WEB-INF/velocity.properties </param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping> <servlet-name>VeloServlet</servlet-name> <url-pattern>/veloExample</url-pattern></servlet-mapping>Setelah itu buatlah sebuah file velocity.properties didalam folderWEB-INF, isinya adalah: 29
  42. 42. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCresource.loader = classclass.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoaderruntime.log = velocity.logSetiap kali Tomcat dijalankan, akan terbentuk sebuah file velocity.log, file ini dapat dibaca, dan bilamana ada kesalahan dalameksekusi, maka log ini akan melaporkan kesalahannya.JasperReport dan iReportSetelah kita mengetahui adanya teknologi presentasi yangdikembangkan dari Servlet, yaitu JSP, Velocity, ataupun Freemarker,yang mana teknologi Servlet tersebut adalah teknologi yang khususuntuk presentation layer. Ternyata ada teknologi teknologi lainyang dapat digunakan untuk menghasilkan presentation layerlainnya, seperti PDF, GIF, JPG, multimedia, ataupun teknologimeta data seperti XML, SOAP.Untuk mengembangkan teknologi PDF atau outputnya berbentukreport seperti Excel, Word, ODF, ataupun CSV, dapat menggunakanJasperReport, iText atau POI. Sebenarnya ini cara membuatsolusi untuk presentasi yang berbeda. Velocity, Servlet atau JSPsebenarnya menghasilkan output untuk dikonsumsi oleh browser,hal ini dikarenakan Servlet merupakan implementasi menghandleHTML.30
  43. 43. Seri Enterprise OpenSource iReport sebagai IDE JasperReportSecara garis besar, sebenarnya semua teknologi presentation layeradalah mentransformasikan sebuah sumber data menjadi data lain.JasperReport adalah salah satunya engine untuk membuat reportbaik itu yang outputnya sebagai PDF, Excel, ataupun CSV. Dimanauntuk mengembangkannya telah datang sebuah IDE yang bekerjamirip seperti Eclipse, hanya bedanya IDE ini bekerja sebagaidesigner JasperReport. IDE ini bernama iReport. JasperReport daniReport saat ini bernaung dibawah perusahaan JasperSoft, yangmerupakan perusahaan Open Source yang menyediakan solusireporting dan business intelligence.JasperReport memiliki sebuah format file yang berbentuk XML.XML ini adalah metadata yang spesifik bekerja di Java. Metadataini bilamana dicompile menggunakan jasper compiler, sebuahcompiler berbasis Java. Compiler ini akan merubah metadataini menjadi report bytecode, yang secara teknis dapat dikatakansebagai sebuah Java class yang digunakan untuk fungsi yanglain. 31
  44. 44. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCBilamana bytecode tersebut dieksekusi menggunakan JasperReport,maka akan menghasilkan output yang diinginkan. Untuk lebihjelasnya dapat melihat ilustrasi dibawah ini: Ilustrasi Transformasi dari JasperReportSelain itu JasperReport juga telah datang dengan JasperReportViewer, yaitu aplikasi Swing untuk melakukan preview terhadapoutput dari proses transformasi Jasper. Project Postila yangdibahas dibab 9, menggunakan implementasi Jasper sebagaiengine reportnya. JasperReport Viewer32
  45. 45. Seri Enterprise OpenSourceJFreeChart dan CewolfAda sebuah teknologi atau sebuah engine yang bekerja denganmenghasilkan output yang lebih ilustratif, yaitu berbentuk grafis.Engine tersebut disebut JFreeChart. JFreeChart adalah opensourcecharting engine berbasis Java. JFreeChart ini telah terintegrasipenuh dengan JasperReport, sehingga kita dapat menghasilkanreport yang terdapat chart atau grafis seperti bar chart, scatter. Output JFreeChart berbentuk Bar ChartUntuk mempermudah implementasi JFreeChart dengan JSP, adasebuah teknologi yang merubah JFreeChart menjadi taglib, projekopensource ini bernama cewolf.Mondrian dari PentahoServlet, JasperReport ataupun JFreeChart/Cewolf adalah solusiyang menghasilkan output static, artinya hasil akhirnya harusmelakukan proses ulang atau rerequest untuk menghasilkan reportyang lebih interaktif, projek ini adalah Mondrian. Mondriansekarang merupakan salah satu tools business intelligence dariPentaho, salah satu penyedia solusi BI berbasis Open Sourceterbesar didunia.Mondrian sebenarnya implementasi dari MDX, sebuah engineOLAP yang disubmit ke ECMA oleh Microsoft, dimana MDX inimerupakan format standar dari SQL Server Repoting. 33
  46. 46. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCMondrian datang dengan integrasi dengan JPivot, sebuahimplementasi pivot table, yang mana kita dapat menemukannya diMicrosoft Excel. Berikut adalah bentuk dari output JPivot, dimanasource datanya berbentuk MDX menggunakan Mondrian. Pivot berbentuk HTML dengan JPivot dan MondrianAdapun output diatas adalah data yang dikeluarkan merupakanoutput dari MDX untuk table C_INVOICELINE, yang merupakanMDX untuk melihat sales dari aplikasi Compiere.Berikut adalah MDX skema dari pivot diatas.<?xml version=”1.0” encoding=”UTF-8”?><Schema name=”Compiere”><Cube name=”Sales”><Table name=”C_INVOICELINE”/>34
  47. 47. Seri Enterprise OpenSource<Dimension foreignKey=”M_PRODUCT_ID” name=”Product”><Hierarchy allMemberName=”All Product” hasAll=”true” name=”Product” primaryKey=”M_PRODUCT_ID” primaryKeyTable=”M_PRODUCT”><Join leftKey=”M_PRODUCT_CATEGORY_ID” rightKey=”M_PRODUCT_CATEGORY_ID”> <Table name=”M_PRODUCT”/> <Table name=”M_PRODUCT_CATEGORY”/></Join><Level column=”NAME” name=”Category” table=”M_PRODUCT_CATEGORY”/><Level column=”NAME” name=”Product” table=”M_PRODUCT”/></Hierarchy></Dimension><Dimension foreignKey=”C_INVOICE_ID” name=”Customer”> <Hierarchy allMemberName=”All Customer” hasAll=”true” name=”Customer” primaryKey=”C_INVOICE_ID” primaryKeyTable=”C_INVOICE”> <Join leftKey=”C_BPARTNER_ID” rightAlias=”C_BPARTNER” rightKey=”C_BPARTNER_ID”> <Table name=”C_INVOICE”/> <Join leftKey=”C_BP_GROUP_ID” rightKey=”C_BP_GROUP_ID”> <Table name=”C_BPARTNER”/> <Table name=”C_BP_GROUP”/> </Join> </Join><Level column=”NAME” name=”Customer Cat” table=”C_BP_GROUP”/> <Level column=”NAME” name=”Customer” table=”C_BPARTNER”/></Hierarchy> 35
  48. 48. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC</Dimension><Measure aggregator=”sum” column=”QTYINVOICED” formatString=”#,###.0”name=”Qty Sales”/><Measure aggregator=”sum” column=”LINENETAMT” formatString=”#,###.00” name=”RM Sales”/></Cube></Schema>36
  49. 49. Seri Enterprise OpenSource BAB IIIBerkenalan dengan Hibernate untuk solusi Model pada MVCBab ini akan membahas lebih dalam mengenai teknologi layerModel pada MVC. Model adalah sebuah layer yang lebih dekatke sumber data, baik itu berupa database, webservices, atau filesystem.Untuk membuat model ini dalam berinteraksi dengan Controller,dapat dilakukan dengan menggunakan mekanisme membuatthread baru dengan New, atau melakukan injection. Bab berikutnyaakan membahas bagaimana injection, yang mana akan membuatlayer controller dan model menjadi sebuah satu kesatuan.Bab ini akan membahas lebih dalam mengenai mekanisme modelyang berinteraksi dengan database, yang sering disebut teknologiORM atau singkatan dari Object Relational Mapping.Sebenarnya teknologi ORM ada beberapa macam, seperti Toplinkdari Oracle, Kodo dari Bea Systems, dan tentu saja yang akandibahas lebih dalam dibab ini adalah Hibernate. ORM palingpopuler didunia. 37
  50. 50. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC OR Mapping Collection Table1 Object Collection Object Table2 Collection Object Table3 Package DB Mekanisme Object Relational Mapping BekerjaORM sebenarnya adalah sebuah teknologi yang menjadi satu lapisantara aplikasi dengan database, yang mana ORM ini bekerjaseperti database juga, tetapi hanya berbentuk objek. Setiapobjek didalam ORM, umumnya mewakili table dalam database.Akibat dari teknologi mapping ini membuat sebuah aplikasiyang dikembangkan dengan ORM, tidak terikat dengan databasemanapun. Sedangkan untuk melakukan query database, denganORM digunakan sebuah object relational language, yang bekerjamirip dengan SQL. Umunya setiap table dan objek POJO dimapdengan sebuah XML .Setelah spesifikasi final EJB3 ini keluar, yaitu dengan datangnyastandar Java Persistence API atau JPA sebagai salah satu darispesifikasi inti dari EJB3. Dimana sebenarnya JPA ini adalah versianonasi dari ORM metadata. ORM mengganti XMLnya menjadiperintah anonasi didalam Java. Akibat dari standar EJB3 yangbernomor JSR 220 ini, telah membuat teknologi Hibernate, Toplinkdan Kodo, yang semuanya adalah teknologi ORM, menjadi intidari EJB3. Untuk Hibernate, agar Hibernate dapat menjadi EJB338
  51. 51. Seri Enterprise OpenSourceharus melakukan integrasi antara Hibernate core, Hibernateannonation dan Hibernate entity manager. Dengan hadirnya JPA,membuat teknologi TopLink dan Hibernate secara kasat mataadalah sama.Hibernate yang datang dengan 2 versi yaitu versi core dan versiannonation, sebenarnya secara fungsi adalah sama, perbedaannyaHibernate versi core memerlukan XML sebagai mappernya. Yangmana dalam implementasinya sebenarnya hanya menganti objectConfiguration menjadi AnnonationConfiguration.Berkenalan dengan Hibernate ToolsUntuk memulai sebuah projek berbasis Hibernate, yang termudahadalah dengan menggunakan Eclipse Calisto, dan menambahkanJBoss IDE kedalamnya.Hibernate Tools sebenarnya datang dengan 2 teknologi, sebagaiplugins Eclipse dan sebagai script pada ant. Penulis merasakanbilamana menggunakan plugins, seorang programmer dapatmencoba HQLnya terlebih dahulu, sedangkan dengan Ant,memungkinkan diintegrasikan dengan script lainnya didalamAnt, seperti DBUnit, Junit, ataupun CVS update. DBUnit danHibernateTool akan dibahas dalam bab ini.Mekanisme mengidentifikasi Hibernate Tools telah berjalandengan baik adalah melakukan New Project, coba scroll, pastiada kata Hibernate didalamnya. Sedangkan cara menginstallnyaadalah dengan mengextract JBoss IDE atau Hibernate ToolsIDE kedalam folder Eclipse. Hal ini terjadi untuk semua tipeEclipse tanpa perlu perubahaan. Tentu saja plugins JBoss terbarumemerlukan Calisto. 39
  52. 52. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC Membuat Project BaruBuatlah sebuah Java Project, kemudian buat sebuah HibernateConfiguration file (hibernate.cfg.xml). Membuat hibernate.cfg.xml baru40
  53. 53. Seri Enterprise OpenSourceSebaiknya hibernate.cfg.xml disimpan didalam folder src, yangartinya sama dengan dikenal saat terjadi runtime, dengan Eclipse,akan tercopy ke folder build. Setting Configuration untuk hibernate.cfg.xml<?xml version=”1.0” encoding=”UTF-8”?><!DOCTYPE hibernate-configuration PUBLIC“-//Hibernate/Hibernate Configuration DTD 3.0//EN”“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”><hibernate-configuration><session-factory name=”HibernateSessionFactory”><property name=”hibernate.connection.driver_class”>org.gjt.mm.mysql.Driver</property><property name=”hibernate.connection.password”>tulalit</property><property name=”hibernate.connection.url”>jdbc:mysql://localhost/blueoxygen2</property> 41
  54. 54. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC<property name=”hibernate.connection.username”>root</property><property name=”hibernate.dialect”>org.hibernate.dialect.MySQLDialect</property></session-factory></hibernate-configuration>Step berikutnya adalah dengan membuat Hibernate ConsoleConfiguration, configuration ini diperlukan untuk membuatHQL (Hibernate Query Language) yaitu SQLnya Hibernate, ataumentest Criteria (filter terhadap sebuah query). Jangan lupa memasukan output project kedalam classpathJangan lupa untuk memasukan folder binary kedalam classpathdari Hibernate Console Configuration ini. Hal ini diperlukankarena Hibernate Console ini tidak dapat mengenai objek ORM.Bilamana proses ini telah selesai dapat masuk ke Hibernateperspective, maka akan muncul sebuah tree dari Hibernate yangisinya adalah Configuration, SessionFactory dan database. Adapun42
  55. 55. Seri Enterprise OpenSourceDatabase ini terdiri dari semua POJO yang memiliki anonasi JPAatau XML metadata. Hibernate Configuration consoleBilaman step ini telah berhasil, artinya Hibernate plugins padaEclipse Calisto telah terinstall dengan baik.Membuat Object Mapping PertamaLangkah berikutnya adalah dengan membuat sebuah POJOyang memiliki anonasi, POJO ini akan terhubung dengan table“businesspartner”.Adapun sebelum memulai langkah berikutnya, copylah sebuah.jar dari binary hibernate (dalam folder lib) yang didownload dariwebsitenya yaitu http://www.hibernate.org. Masukan semua jartersebut dalam Build Pathnya Eclipse, caranya dengan mengklikkanan dari projek Javanya, kemudian tambahakan jarnya. 43
  56. 56. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC Library JAR yang dimap dalam projekBilamana telah selesai, buatlah sebuah class DefaultPersistence,objek ini adalah sebuah objek yang termapping untuk menghasilkanid yang unik dari setiap kegiatan persistensi. Objek ini sangatdiperlukan dalam pengembangan kedepannya, karena denganmelakukan implementasi objek ini, akan terbentuk sebuah tabledengan record id, serta akan terisi otomatis bilamana dilakukansave terhadap data baru.Adapun DefaultPersistence ini adalah:package org.blueoxygen.bbook2;import java.io.Serializable;import javax.persistence.Embedded;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.MappedSuperclass;import org.hibernate.annotations.GenericGenerator;@MappedSuperclasspublic class DefaultPersistence implements Serializable44
  57. 57. Seri Enterprise OpenSource{private String id;@Id @GeneratedValue(generator=”system-uuid”)@GenericGenerator(name=”system-uuid”,strategy=”uuid”)public String getId() { return id;}public void setId(String id) { this.id = id;} }Adapun langkah yang harus dilakukan adalah dengan membuatsebuah Java class dengan nama BusinessPartner.java.package org.blueoxygen.bbook2;import java.util.ArrayList;import java.util.List;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Inheritance;import javax.persistence.InheritanceType;import javax.persistence.ManyToOne;import javax.persistence.Table;import org.blueoxygen.bbook2.DefaultPersistence;import org.hibernate.Session;@Entity()@Table(name=”businesspartner”)@Inheritance(strategy=InheritanceType.SINGLE_TABLE)public class BusinessPartner extends DefaultPersistence{ //private List contacts; private String name; private String officePhone; private String fax; private String email; private String otherEmail; 45
  58. 58. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC private String address; private String city; private String zipCode; private String country; private String description; private String code;}Setelah itu, pilih semua private object dari name sampai code,kemudian klik kanan, pilihlah Membuat Get dan Set dari variableKemudian pilihlah semua variable yang ada, dan secara otomatissemua variable akan memiliki method getXXX dan setXXX.46
  59. 59. Seri Enterprise OpenSource Pemilihan untuk generate Get/SetTambahkan @Column() pada semua baris diatas getXXX, seperticontoh pada getAddress():@Column()public String getAddress() { return address;}Setelah itu jangan lupa untuk meregister class yang telah dibuatdidalam hibernate.cfg.xml, dengan menambahkan baris berikut:<mapping class=”org.blueoxygen.bbook2.BusinessPartner”/>Mengenerate Database dengan HibernateToolsBilamana langkah ini telah dilakukan, maka proses berikutnyaadalah dengan membuat table secara otomatis menggunakanHibernateTools.Untuk mengenerate HibernateTools diperlukan ant script (build. 47
  60. 60. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCxml), sehingga table businesspartner dapat digenerate otomatis.Adapun file ant atau build.xml adalah sebagai berikut:<project name=”bbook2hibernate” default=”schemaexport”><target name=”init”> <property name=”bb2h.base” value=”/home/frans/workspace/Hibernate”/> <property name=”bb2h.lib” value=”${bb2h.base}/lib”/> <property name=”bb2h.classes” value=”${bb2h.base}/bin”/> <property name=”bb2h.source” value=”${bb2h.base}/src”/></target><target name=”schemaexport” depends=”init”><taskdef name=”hibernatetool”classname=”org.hibernate.tool.ant.HibernateToolTask”> <classpath> <fileset dir=”${bb2h.lib}”> <include name=”**/*.jar”/> </fileset> <path location=”${bb2h.bin}”/> </classpath></taskdef><hibernatetool destdir=”${bb2h.bin}”><annotationconfiguration configurationfile=”${bb2h.source}/hibernate.cfg.xml”/><hbm2ddl drop=”true” console=”false” create=”true” outputfilename=”bb2h-ddl.sql” delimiter=”;” export=”true” />48
  61. 61. Seri Enterprise OpenSource </hibernatetool></target></project>Jalankan script build.xml tersebut dengan cara melakukan klikkanan terhadap file build.xml yang telah dibuat, kemudian pilihRun As, dilanjutkan dengan Ant script. Mengeksekusi Ant dari EclipseBilamana tidak terjadi masalah, maka console akan menghasilkanoutput seperti berikut ini:Buildfile: /home/frans/workspace/Hibernate/build.xmlinit:schemaexport:[hibernatetool] Executing Hibernate Tool with aHibernate Annotation/EJB3 Configuration[hibernatetool] 1. task: hbm2ddl (Generates databaseschema)[hibernatetool] Oct 5, 2006 11:18:49 PM org.hibernate.cfg.Environment <clinit>[hibernatetool] INFO: Hibernate 3.2 cr1[hibernatetool] Oct 5, 2006 11:18:49 PM org.hibernate.cfg.Environment <clinit>[hibernatetool] INFO: hibernate.properties not found[hibernatetool] Oct 5, 2006 11:18:49 PM org.hibernate.cfg.Environment buildBytecodeProvider[hibernatetool] INFO: Bytecode provider name : cglib.... 49
  62. 62. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC........[hibernatetool] Oct 5, 2006 11:18:50 PM org.hibernate.connection.DriverManagerConnectionProvider configure[hibernatetool] INFO: connection properties: {user=root,password=****}[hibernatetool] Oct 5, 2006 11:18:50 PM org.hibernate.tool.hbm2ddl.SchemaExport execute[hibernatetool] INFO: schema export complete[hibernatetool] Oct 5, 2006 11:18:50 PM org.hibernate.connection.DriverManagerConnectionProvider close[hibernatetool] INFO: cleaning up connection pool:jdbc:mysql://localhost/testBUILD SUCCESSFULTotal time: 3 secondsBilamana tidak ditemukan error, coba jalankan MySQL QueryBrowser, klik table test, maka secara otomatis akan terbentuk tablebusinesspartner. Jalankan perintah “show tables”, makan secaraotomatis akan muncul tables_in_test bernama businesspartner.Ini artinya proses pembuatan table dari hibernate telah berhasildengan sukses.50
  63. 63. Seri Enterprise OpenSource MySQL Query BuilderMenjalankan Objek HibernateLangkah berikutnya bilamana pembuatan database telah berhasil,adalah dengan mencoba menjalankan sebuah aplikasi Java yangmemanggil objek Hibernate.Secara konsep proses ini adalah melakukan inisiasiHibernateSessionFactory, kemudian baru melakukan eksekusi,dimana untuk mengeksekusi diperlukan script HQL (HibernateQuery Language). Adapun script untuk melakukan testingHibernate adalah sebagai berikut:package org.blueoxygen.bbook2;import java.util.ArrayList;import java.util.List;import org.hibernate.Criteria;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;public class HibernateQueryTest {public static void main(String[] args) {SessionFactory sf;Session sess;AnnotationConfiguration config = new AnnotationConfiguration(); config.configure(“hibernate.cfg.xml”); sf = config.buildSessionFactory(); sess = sf.openSession(); BusinessPartner bpt = new BusinessPartner(); bpt.setName(“Meruvian11”); bpt.setAddress(“Tulodong Jakarta”); sess.saveOrUpdate(bpt); List<BusinessPartner> bp = new ArrayList<BusinessPartner>(); 51
  64. 64. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC bp = sess.createQuery(“FROM “ +BusinessPartner.class.getName()).list(); for(BusinessPartner business : bp){ System.out.println(“Biz Name:” +business.getName()); } sf.close(); }}Terdapat 2 kegiatan dalam script diatas, yaitu membuatrecord baru dengan perintah saveOrUpdate dan melakukanquery ke database. Perintah query ke database (HQL) adalah“FROM”+BusinessPartner.class.getName()).Melakukan Query dengan HSQL EditorAdapun cara lain untuk mengetahu total record didalam databaseadalah dengan menjalankan HSQL Script Editor pada Eclipse.Cara memanggil HQL Editor adalah dengan menekan icon HSQLdiatas Hibernate Configuration Config. Masukan perintah berikut“FROM BusinessPartner”, artinya query semua data dari objekBusinessPartner. Harap diperhatikan agar nama objek adalah casesensitif.52
  65. 65. Seri Enterprise OpenSource HQL EditorCobalah klik Hibernate Query Result. Bilamana query telahberhasil, akan terdapat hash objek didalam Query Result, cobalahklik salah satu dari objek hash tersebut. Secara otomatis Propietiesakan memunculkan informasi dari isi dari objek tersebut.Bandingkan dengan melakukan perintah “SELECT * FROMbusinesspartner” pada database, hasilnya harus sama.Bilamana semua langkah diatas telah berhasil dijalankan, artinyaAnda telah berhasil bekerja dengan sebuah teknologi ORMbernama Hibernate.ORM dengan RelationshipSetelah mencoba membuat projek kecil berbasis Hibernate denganmemaping satu table dan memasukan anonasi, berikut ini adalahmengembangkan dengan metode many to many, yaitu dengankasus Event dan Person.Untuk lebih mudahnya buat lah dua class dengan nama Eventdan Person pada projek Java yang telah ada. Adapun kode untuk 53
  66. 66. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCPerson.java adalahpackage org.blueoxygen.bbook2;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.Inheritance;import javax.persistence.InheritanceType;import javax.persistence.ManyToMany;import javax.persistence.Table;import org.blueoxygen.bbook2.DefaultPersistence;@Entity@Table(name=”person”)@Inheritance(strategy=InheritanceType.SINGLE_TABLE)public class Person extends DefaultPersistence {private String age;private String firstname;private String lastname;private Set<Event> events;public String getAge() { return age;}public void setAge(String age) { this.age = age;}public String getFirstname() { return firstname;}public void setFirstname(String firstname) { this.firstname = firstname;}public String getLastname() { return lastname;}public void setLastname(String lastname) { this.lastname = lastname;}54
  67. 67. Seri Enterprise OpenSource@ManyToMany(mappedBy=”persons”)public Set<Event> getEvents() { return events;}public void setEvents(Set<Event> event) { this.events = event;} }Sedangkan kode untuk Event.java adalahpackage org.blueoxygen.bbook2;import java.sql.Date;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.Inheritance;import javax.persistence.InheritanceType;import javax.persistence.ManyToMany;import javax.persistence.Table;import org.blueoxygen.bbook2.DefaultPersistence;@Entity@Table(name=”event”)@Inheritance(strategy=InheritanceType.SINGLE_TABLE)public class Event extends DefaultPersistence {private String title;private Date date;private Set<Person> persons;@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE})public Set<Person> getPersons() { return persons;}public void setPersons(Set<Person> person) { this.persons = person;}public Date getDate() { 55
  68. 68. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC return date;}public void setDate(Date date) { this.date = date;}public String getTitle() { return title;}public void setTitle(String title) { this.title = title;}}Perhatikan baris pada Event.java, dengan anonasi @ManyToMany@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})public Set<Person> getPersons() { return persons;}public void setPersons(Set<Person> person) { this.persons = person;}Baris diatas menerangkan bahwa isi dari persons adalah berbentukJava collection, dimana pada kasus ini mengimplementasikanSet. Untuk kasus ini, sebenarnya dapat melakukan implementasiyang bermacam-macam seperti ArrayList, HashMap, ataupunmenggunakan implementasi yang lebih advanced menggunakanJakarta Commons Collections dari Apache.Bilamana telah selesai, register kedua class tersebut kedalamhibernate.cfg.xml diantara session-factory.<mapping class=”org.blueoxygen.bbook2.BusinessPartner”/><mapping class=”org.blueoxygen.bbook2.Event”/>Jalankan kembali build.xml, untuk membuat table Event danPerson.56
  69. 69. Seri Enterprise OpenSourceUntuk mencoba hubungan antara Event dan Person, dapat denganmenggunakan mekanisme yang sama dengan contoh pertama.Berikut ini adalah sebuah contoh lengkap untuk menambah datakedalam objek Event.package org.blueoxygen.bbook2;import java.sql.Date;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;import org.blueoxygen.bbook2.Event;import org.blueoxygen.bbook2.Person;import org.hibernate.Criteria;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;public class HibernateOnetoManyTest {public static void main(String[] args) { SessionFactory sf; Session sess; Criteria crit; AnnotationConfiguration config = new AnnotationConfiguration(); config.configure(“hibernate.cfg.xml”); sf = config.buildSessionFactory(); sess = sf.openSession(); sess.getTransaction().begin(); Event event = new Event(); List<Person> persons = new ArrayList<Person>(); persons = (ArrayList<Person>) sess.createCriteria(Person.class).list(); 57
  70. 70. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC event.setTitle(“Third Event”); event.setDate( new Date(System.currentTimeMillis())); event.setPersons(new HashSet<Person>()); for(Person p : persons){ event.getPersons().add(p); } sess.save(event); sess.getTransaction().commit(); Person person = (Person) sess.get(Person.class, “1”); for(Event e : person.getEvents()){ System.out.println(e.getTitle()); } sf.close(); }}Coba jalankan, pasti error pada baris (Person) sess.get(Person.class, ”1”), hal ini dikarenakan, method ini mereturn objek Persondengan id=1. Untuk mengatasinya, buatlah sebuah record padatable Person diisi dengan data terlebih dahulu, dengan id = 1. Ataumenjalankan build.xml dengan Ant, dengan menjalankan targetuntuk export-data.Perhatikan baris untuk mengisi objek Event.sess.getTransaction().begin();Event event = new Event();List<Person> persons = new ArrayList<Person>();persons = (ArrayList<Person>)sess.createCriteria(Person.class).list();event.setTitle(“Third Event”);event.setDate(newDate(System.currentTimeMillis()));event.setPersons(new HashSet<Person>());for(Person p : persons){ event.getPersons().add(p);58
  71. 71. Seri Enterprise OpenSource}sess.save(event);sess.getTransaction().commit();Baris ini sebenarnya adalah implementasi JTA (Java TransactionAPI), yang membuat setiap proses transaksi harus dicommit untukdisetujui untuk direkam kedalam database, bilamana tidak, secaraotomatis akan di rollback.Baris diatas bilamana diartikan adalah sebagai berikut: 1. Transaksi dimulai dengan begin() 2. Masukan ArrayList dengan isi dari database yaitu person 3. Isi variable title dan date pada Event 4. Lakukan looping untuk semua isi dari persons (ArrayList) 5. Tambahkan setiap user kedalam object Event 6. Rekam semuanya dengan perintah save(event) 7. Commit semua kegiatan ini.Jalankan beberapa kali HibernateManyToMany diatas, kemudiancobalah script dibawah ini. Coba buka table event, pilihlah salahsatu id, kemudian ganti isian ff88xxx dengan id yang terdapat ditable event. Jalankan.Event e = (Event) sess.get(Event.class, “ff8080810e205e45010e205e47f00001”); for(Person p : event.getPersons()){ System.out.println(p.getFirstname());}Coba jalankan dengan beberapa id yang berbeda, hasilnya berbedabukan. Kita tahu table Event tidak memiliki relationship recordatau foreign key terhadap Person, dan begitu juga sebaliknya.Tetapi resultnya terfilter berdasarkan idnya bukan. Sebenarnyarelationship table antara event dan person terdapat pada event_ 59
  72. 72. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVCperson.Yang hebat dari tipe ManyToMany dari JPA adalah bilamanaada objek bertipe ini, secara otomatis akan membuat tablepenghubungnya.Coba ganti-ganti id didalam table baik event atau person, jalankankembali. Apa yang terjadi? Error akan muncul.No row with the given identifier exists: [org.blueoxygen.bbook2.Event#ff8080810e205e85010e205e878e0001]Implementasi DBUnit sebagai ETLHibernate Tools khusus untuk menggenerate table, memilikibeberapa metode, dan secara default adalah menghapus yangada, kemudian membuatkan yang baru. Dalam implementasinya,metode ini adalah bagus sekali bilamana kita tidak mau pusingdengan table yang digenerate, tetapi ternyata pada implementasinyasering terjadi ada table yang harus diisi terlebih dahulu. Malahanyang lebih tinggi lagi adalah data harus ditransfer dari satudatabase ke database lain, mengikuti independensi ORM yangdigunakan, seperti yang pernah penulis alami, membuat sebuahimplementasi berbasis Hibernate tentu saja, sistem dikembangkandengan MySQL, client menggantinya menjadi SQL Server.Padahal MySQL sudah dijalankan untuk operasional. Yang lebihparah lagi, pada saat terjadi migrasi, ada beberapa struktur databaseyang berubah.Sehingga yang terjadi adalah kita harus melakukan patch terhadapstruktur table mengikuti objek Hibernate yang berubah, tetapi isitetap ada.Ada dua pendekatan yang dapat dilakukan tentu saja, yaitumenggunakan tools migrasi untuk memindahkan data dari MySQLke SQL Server, kemudian objek Hibernate yang berubah dimap60
  73. 73. Seri Enterprise OpenSourcedengan table-table di SQL Server, dan dirubah satu persatu.Ternyata ada metode yang lebih baik, yaitu denganmengimplementasikan ETL singkatan dari Extract TransformLanguage, sebuah mekanisme yang memungkinkan data diMySQL dipindahkan ke SQL Server atau database manapunbernama DBUnit. Sedangkan HibernateTools tetap diutilisasikan,sehingga Hibernate yang membuat struktur database, dan DBUnityang mengisi table yang baru terbentuk, dan semua ini hanyadijalankan dengan satu perintah yaitu ant.Adapun untuk melakukan integrasi migrasi ini dapat dilakukandengan menggunakan build.xml yang telah kita kembangkan,kemudian ditambahkan dengan task dbunit.Tentu saja ide ini dapat diimplementasikan bilamana kitamengembangkan produk dengan Hibernate, artinya pihak clientdapat menentukan databasenya apa saja, dan Hibernate akanmengenerate table, dan isinya oleh DBUnit, untuk semua databaseyang didukung Hibernate dan DBUnit tentu saja hal ini terjadi.Untuk menggunakan DBUnit dalam Ant sebenarnya sangat mudah.Pertama yang paling penting adalah skema untuk export daridatabase ke format XML.Scriptnya adalah sebagai berikut<target name=”export-data” description=”Export data to xml file”><taskdef name=”dbunit” classpathref=”classpath.build” classname=”org.dbunit.ant.DbUnitTask”/><dbunit driver=”${db.driver}” url=”${db.url}” userid=”${db.username}” 61
  74. 74. Cara Cepat Mengembangkan Aplikasi Java dengan Metode MVC password=”${db.password}”> <export dest=”${db.exportdata}” format=”xml”/></dbunit><echo message=”Data exported”/></target>Perintah ini berarti mengcopy semua data dari database (${db.url})menjadi metadata berformat xml. Adapun output dari menjalankanini dalam Ant adalahBuildfile: /home/frans/workspace/Hibernate/build.xmlexport-data: [dbunit] Executing export: [dbunit] in format: xml to datafile: /home/frans/workspace/Hibernate/dbunt-export.xml [echo] Data exportedBUILD SUCCESSFULTotal time: 2 secondsXML dari kegiatan export ini dapat dikirim ke database lainnya,dan tentu saja harus JDBC compliance. Cara paling mudah adalahdengan menambahkan script berikut pada build.xml<target name=”import-data” description=”Add some data to the database”> <taskdef name=”dbunit” classpathref=”classpath.build” classname=”org.dbunit.ant.DbUnitTask”/> <dbunit driver=”${db.driver}” url=”${db.url}” userid=”${db.username}” password=”${db.password}”> <operation type=”INSERT” src=”${db.testdata}” format=”xml”/></dbunit><echo message=”Data imported”/></target>62
  75. 75. Seri Enterprise OpenSourceBilamana import-data dijalankan oleh Ant, akan muncul outputseperti ini, diluar ini artinya error.Buildfile: /home/frans/workspace/Hibernate/build.xmlimport-data: [dbunit] Executing operation: INSERT [dbunit] on file: /home/frans/workspace/Hibernate/all-db-data.xml [dbunit] with format: xml [echo] Data importedBUILD SUCCESSFULTotal time: 2 secondsSedangkan untuk membuat db.driver, db.url, db.username sertadb.password dapat dikenal, buatlah sebuah file build.propiertiesyang diletakan dilokasi yang sama dengan build.xml berada.DBUnit sebenarnya dapat melakukan kegiatan yang lebih spesifik,seperti membandingkan data dengan isi database tujuan.Pengembangan Hibernate LanjutanSebenarnya pengembangan apliksi yang menggunakan ORM akanmemiliki keflexisibilitasan terhadap database alias databasenyaindependent.Untuk kasus diatas, hanya mengganti jdbc driver dari MySQLke Oracle, dan mengganti dialect dari MySQLDialect menjadiOracleDialect, secara otomatis aplikasi kita berjalan pada databaseOracle.Kalau diperhatikan lebih lanjut, semua mekansime koneksi,bilamana mapping telah berhasil, adalah melakukan inisialisasisession, dan tentu saja apa yang terjadi bilamana aplikasi lebihkompleks, inisialisasi diinisialisasi disemua objek atau dibuat satutetapi dishared. Ini merepotkan bukan. 63

×