Your SlideShare is downloading. ×
4. membuat aplikasi berbasis mvc
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

4. membuat aplikasi berbasis mvc

2,584

Published on

Published in: Education, Technology
1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
2,584
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
1
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Mengembangkan aplikasi dengan konsep MVCKonsep MVC dan Action FrameworkDalam bab ini sebenarnya penulis mengulang kembali apa yang telah ditulis pada buku sebelumnyayaitu “Cara Cepat Mengembangkan Aplikasi Java Enterprise menggunakan Arsitektur MVC”.Yang membedakan dengan buku sebelumnya adalah MVC telah berkembang mendukung fiturREST, yang mana pengembangannya adalah otomatis menjadi REST. Dapat dikatakan bab iniberhubungan dengan bab berikutnya, untuk membuat solusi lengkap MVC dan REST.Pendalaman bab ini adalah memberikan gambaran mengembangkan aplikasi CRUD denganmemisahkan setiap hasil dari proses komputasi adalah satu file action.Adapun pengembangan aplikasi berbasis MVC adalah sebuah mekanisme penciptaan aplikasi yangmenggunakan solusi integrasi dari framework M, V dan C, dimana dalam kasus yang akandijelaskan menggunakan Struts2 sebagai controller, Velocity sebagai viewer, dan Hibernate sebagaimodel. Adapun Spring digunakan sebagai perekat antara Hibernate dengan Struts2.Modularitas dari pengembangan MVC sebenarnya kata kuncinya adalah pada Controller danInjection, dimana Controller adalah sebuah pemeta antara sebuah obyek menjadi sesuatu yang dapatdirepresentasikan, sedangkan Injection adalah memberikan obyek. Gabungan dari dua konsep inimenyusun inti dari MVC.Controller yang tersedia dipasaran adalah berjenis Action Framework dan Component Framework.Action Framework adalah merepresentasikan dari mekanisme HTTP, yaitu request dan response,
  • 2. walaupun kalau ditilik lebih dalam Component Framework juga melakukan hal yang sama.Buku ini hanya membahas area untuk framework berbasis action yaitu Struts2 dan SpringMVC,dimana penekanan adalah pada Struts2, dimana dibuku MVC sebelumnya telah dibahas lebih detail.Controller Framework – Action atau Component based.Seperti yang telah diutarakan sebelumnya, controller adalah mekanisme merubah sebuah obyekmenjadi sebuah informasi, yang mengacu pada permintaan (request), serta hasilnya adalah disebutjawaban (response), dalam implementasinya didalam controller, kita mengimplementasikan Actiondan Result, action adalah sebuah proses setelah dilakukan request, dan result adalah jawaban dariproses.Berikut diagram proses terjadinya request dan response.Untuk lebih detailnya dapat melihat diagram arsitektur dari Struts2 dan SpringMVC, sehingga dapatdijelaskan kemiripan dan perbedaan mekanisme dari kedua controller paling populer didunia ini.
  • 3. Arsitektur Struts2
  • 4. Aristektur SpringMVCMenilik dari perkembangan Java, 2 framework ini sangat popular tetapi tidak pernah dudukbersama mengembangkan sebuah standar yang diajukan di JCP, tetapi malah pihak Sun membuatsendiri standar pengembangan framework yang disebut JavaServer Faces (JSF), sebagaipengembangan dari JSP dan Servlet, yang menggunakan pendekatan component.Berikut adalah siklusnya dari JSF tersebut, yang notabene produk berbasis JSF dikembangkan olehOracle dan Apache (Apache yang mengembangkan Struts – sedangkan SpringMVC dikembangkanSpringSource dengan lisensi Apache).
  • 5. 6 siklus JSFInjection of Control atau Depedancy InjectionHal terpenting lainnyaSalah satu teknik untuk mengatur ketergantungan antar kode program adalah menggunakan teknik yangdisebut Inversion of Control (IoC), atau juga dikenal dengan istilah Dependency Injection (DI). Konsep inicukup abstrak, sehingga cara terbaik untuk memahaminya adalah langsung dengan kode program.Yang mana Martin Fowler, sang maestro aristektur pattern, menuliskan IoC dalam URL berikuthttp://martinfowler.com/articles/injection.htmlyang digambarkan dalam diagram berikutBetul sekali, association menjadi hal paling kritis dalam pengembangan implementasi IoC. Dalam bahasaumum adalah sebuah sulap dari penyediaan obyek.Spring adalah sebuah framework IoC yang popular, sejak Rod Johnson membuat buku J2EE without J2EE,Spring telah menjadi salah satu keajaiban dunia Java. Malah hasil akhir dari proyek Spring, adalahdiakusisinya perusahaan pengembangan Spring, bernama SpringSource seharga 300 juta dolar menjadi divisiVmware.Adapun komponen pendukung Spring adalah sebagai berikut
  • 6. Arsitektur SpringSaat ini Spring, telah berkembang sangat pesat, termasuk implementasi dari modul modul didalam Spring,seperti dengan BlazeDS (dengan Adobe), dan tersedianya banyak modul injection mulai dari Activiti(Workflow Server berbasis BPMN 2.0), sampai Facebook (Spring Social). Dapat juga menggunakan Guicedari Google untuk mengganti Spring, atau Apache Plexus. Sehingga injection tidak selalu menggunakanSpring.Framework IntegrationSetelah mengenal apa itu controller dan injection, langkah berikutnya adalah mengabungkan ke-2framework tersebut menjadi sebuah integration framework atau integrasi beberapa frameworkmejadi satu kesatuan untuk mendukung pengembangan solusi atau aplikasi.Spring dan Struts2 yang menjadi kasus dibawah ini, adalah bentuk integrasi framework, dimanaStruts membawa Apach Velocity sebagai presentation layernya, dan Spring membawa Hibernatesebagai data sourcenya. Gabungan Velocity – Struts2 – Spring – Hibernate inilah yang membentuklahirnya MVC framework yang lengkap. Kombinasi dapat dibuat dengan JSP – SpringMVC –Spring – Hibernate, dimana SpringMVC telah digabungkan dalam distribusi Spring.
  • 7. Platform MVC dengan aplikasinya.Kedepannya, dapat menggunakan mekanisme representasi data dari berbagai sumber, dan dapathanya dengan merubah model mengacu pada berbagai sumber, mekanisme registrasinya adalahdidalam ApplicationContextnya Spring. Peluang pengembangan yang lainDalam implementasi selanjutnya tentu saja harus dikembangkan keamanan seperti manajemenlogin, module security, dan ini adalah implementasi lainnya diatas produk yang telahdikembangkan. Berikut adalah mekanisme security yang dikembangkan diatas Struts2-Spring-Hibernate yang kita sebut Cimande, yang dinaungi dalam proyek bernama BlueOxygen.Impelementasi keamanan di Cimande, kami menggunakan Filter, yang merupakan implementasidari Servlet. Filter adalah bagian dari Java Servlet 2.3, yang mana bekerja sebagai sebuahinteceptor. Harap diperhatikan Struts2 juga memiliki interceptor, tetapi perbedaannya interceptorfilter ditaruh diatas middleware, sedangkan interceptor Struts2 ditaruh didalam Struts2 dan diprosessetelah dispatcher dieksekusi.Berikut adalah integrasi dari beberapa framework menjadi satu kesatuan yang dinamis, dimanaSpring menjadi sebuah injection container yang berjalan didalam JavaEE container.Memulai pemograman MVC - Struts2 (Cimande)Bagi yang telah membaca buku MVC penulis sebelumnya, ada beberapa pendekatan yangmemperlihatkan bahwa aplikasi yang dikembangkan adalah satu ActionSupport akan terhubungdengan satu template. Mekanisme ini tetap dapat digunakan, tetapi ada model menggunakan konselcontroller yang membuat satu controler yang mana setiap methodnya terhubung dengan satutemplate. Pada buku sebelumnya dijelaskan mengembangkan aplikasi setiap templatemembutuhkan satu action, dan mapping semua digunakan dengan nama package, yang dalameksekusinya adalah menambahkan .action dalam packagenya, atau dapat membaca di link berikuthttp://struts.apache.org/2.x/docs/crud-demo-i.html
  • 8. Sebenarnya pengembangan yang tersulit adalah menggabungkan beberapa framework yang kitabutuhkan untuk menjadi satu platform berbasis MVC, dengan bantuan injection framework.Mengacu pada sub bab yang telah dijelaskan, dalam pengembangan sebenarnya juga pengembanganmengacu pada mekanisme controller-injection. Dimana bilamana integrasi telah dilakukan antaracontroller dengan injection, didalam Struts2, hanya dengan mengaktifkan jenis injection menjadi“spring”, otomatis Struts2 dan Spring akan terhubung.Bilamana semua injection telah didefinisikan, pengembangan phase berikutnya yang dilakukan olehprogrammer MVC adalah mengembangkan mengacu pada controller (template dan action) danuntuk datasource langsung ke module yang telah dihubungkan oleh injection, dalam kasus dibawaini adalah menggunakan Hibernate.Harap diperhatikan, ternyata sebuah POJO yang dikembangkan dengan menggunakan kaidahHibernate, umumnya diberikan implementasi @Entity, otomatis akan menjadi sebuah obyek yangtermap didalam Struts2 dan bilamana sebuah @Result diimplementasikan, POJO Hibernate akanterhubung dengan Velocity (template). Ajaib sekali bukan! Mekanisme ini telah memotong banyakjalur manual, dan membuat pengembangan menjadi sangat mudah. Malah di entitas kami yaituMeruvian, pembelajaran semua ini hanya diperlukan dibawah 2 minggu. Mekanisme sebuahdatabase, dimap kedalam obyek (oleh Hibernate), diproses dengan logika dengan ActionSupport(oleh Struts2), dilanjutkan menampilkan nilai akhir menjadi variable $pegawai (di Velocity), adalahsebuah proses yang terjadi dalam MVC, yang digambarkan dibawah ini. Flow dari table pegawai menjadi value $pegawai di HTMLMekanisme yang dikembangkan untuk edisi 1.0 dari Cimande, dapat mengacu pada 2 diagram
  • 9. dibawah ini, yaitu diagram hubungan template dan action, serta diagram hubungan database danobyek. Implementasi action mengextend pada CimandeAction, sedangkan setiap obyek POJO yangdilink dengan database mengextend DefaultPersistance. CimandeAction dan DefaultPersistanceadalah kunci dari terhubungnya POJO yang dikembangkan, dan dapat ditampilkan otomatisditemplate yang dipilih, baik menggunakan Velocity ataupun JSP, ataupu Jasper. Presentasi dapatmengacu pada jenis result dari Struts2. Silahkan install Struts2 plugin sendiri untukimplementasinya atau membuat sendiri Struts2 plugin. Diagram Hubungan antara Action dengan TemplateHarap diperhatikan, mekanisme dari action yang dibuat dengan templatenya, ada 5 template dengan6 action, dimana untuk flow yang yang atas adalah kegiatan mencari, dari data yang sudah ada,sedangkan yang bawah adalah kegiatan membuat data baru.Kemampuan Hibernate untuk membuat data baru ataupun melakukan perubahaan data, adaladianggap sama, sehingga save.action digunakan dengan template yang sama yaitu success.vm.Sedangkan mekanisme create.action dan edit.action sebenarnya adalah form yang sama, yaituFormPegawai, tetapi nama package yang dibuat berbeda. Walaupun memungkinkan kita membuataction yang sama, yaitu create.action dan edit.action adalah action yang sama. Yang mungkin itudidalam kode Anda. Jangan sungkan-sungkan mencoba dan mengimplementasikannya.Mekanisme mencari yaitu filter.action dan create.action adalah sama sebenarnya, tetapi kamimendapatkan dalam beberapa kasus, dibutuhkan form new dan form search yang berbeda, sepertimencari data dengan field khusus, sehingga field yang ada di new atau edit menjadi tidak ada.
  • 10. Diagram Hubungan antara database “pegawai” dengan obyek PegawaiSedangkan mekanisme menghubungkan table pegawai dengan 4 action utama yaitu FormPegawai,SavePEgawai, HapusPegawai dan Cari Pegawai, semuanya terhubung dengan Pegawai.java,dimana Pegawai.java adalah implementasi POJO Hibernate.Berikut adalah code POJO Hibernate Pegawai.import org.blueoxygen.cimande.commons.DefaultPersistence;@Entity()@Table(name="pegawai")@Inheritance(strategy = InheritanceType.SINGLE_TABLE)public class Pegawai extends DefaultPersistence{ private String nip; private String nama; private String alamat; ….}Dalam pengembangannya, dapat menggunakan mekanisme yang lebih simple, tetapi menghasilkanhasil yang sama dengan mekanisme diatas, yaitu menggunakan mekanisme service dan controllerdalam mengimplementasikan ActionSupport.Berikut adalah bentuk pengimplementasian dari Struts2, yang otomatis memiliki banyak template,dengan hanya membuat 2 obyek, yaitu OrderServices dan OrderController. Implementasi lebihlanjut model satu action banyak template, akan dibahas pada bab berikutnya.Diagram dibawah ini sebenarnya adalah inti sari dari showcase dari Struts2. Silahkan melihatsource codenya di source distribution Struts2. Implementasi lebih luas akan dibahas setelah bab ini.
  • 11. Menjalankan CimandeMembuat Model dengan Entity HibernateEntity dalam Hibernate adalah sebuah POJO, yang memiliki implementasi beberapa class dari paketjavax.persistance. Class ini membuat hubungan antara POJO dengan table terbentuk.Berikut adalah contoh Person, sebuah class yang akan digunakan sampai akhir bab ini, yang nantiakan dikonsumsi oleh Android dibab mobility, dan menjadi services REST dibab setelah ini.Berikut adalah potongan class Person, dapat melihat pada kode sumber bab ini di DVD, danbukalah di src/java/org/blueoxygen/cimande/entity/Person.java.@Entity@Table@NamedQueries({ @NamedQuery(name = "getPersons", query = "FROM Person"), @NamedQuery(name = "getPersonsChild", query = "SELECT p FROM Personp WHERE p.parent.id = :id"), @NamedQuery(name = "getChildsCandidate", query = "SELECT pFROM Person p WHERE p.parent.id <> :id OR p.parent.id IS NULL"), @NamedQuery(name = "findPersonsByFirstName", query = "SELECT pFROM Person p WHERE p.firstName LIKE :firstName") })Baris diatas menjelaskan bahwa Person adalah sebuah entity dengan hubungan ke table “person”,maklum @Table tidak disetup, artinya menggunakan nama class “person”. Sedangkan implementasifieldnya dapat melihat isi dari class dibawah ini.public class Person implements Serializable { @Id @GeneratedValue(generator = "p") @GenericGenerator(name = "p", strategy = "uuid") private String id;… @Column
  • 12. private String status; @OneToOne @JoinColumn(name = "relation_id") private Person relation; @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name = "parent_id") private Person parent;}@IdGenerator adalah sebuah generator ID unik yang propietary dari Hibernate, yang menarikadalah setiap id akan ditaruh di field “id”, dan perhatikan @Column, itu adalah fieldnya, mengikutivariablenya, bilamana private String status, itu fieldnya adalah “status”.Sedangkan hubungan antara table dinotasi dengan @OneToOne dan @ManyToOne.Nah setelah itu coba ke /src/java/resource, cari hibernate.cfg.xml, disana ada satu baris mengenaiorg.blueoxygen.cimande.entity.Person, dalam tag XML. Seperti berikut<hibernate-configuration> <session-factory> <mapping class="org.blueoxygen.cimande.entity.Person" /> </session-factory></hibernate-configuration>Betul sekali, obyek Person sudah didefinisikan berhubungan dengan table “person”, tetapibagaimana dapat digunakan, yah, harus didaftarkan dalam hibernate-configuration ini. Bilamanatelah didaftarkan, setiap kita menggunakan session factory dari Hibernate, otomatis Person identikdengan “person”, dan kita dapat menggunakan perintah-perintah ORM, seperti .save(), yangnotabene adalah perintah merekam data ke database. Konsep merubah datasource dari RDBMS(“person”) ke POJO (Person).Setiap obyek akan merepresentasikan table, dan hubungan dihubungkan dengan @OneToOne atau@OneToMany, jadi jangan kaget bilamana dalam RDBMS tidak ada primary key dan foreign key,hibernate tetap membuatkannya secara virtual didalam obyek-obyeknya. Mekanisme ini untukmenjamin hubungan table dan class tentu saja.Untuk lebih detail hibernate bekerja seperti apa, dapat membaca buku MVC yang sebelumnya,dimana dilampirkan dalam DVD yang disertakan dalam buku ini.Injection dalam CimandeNah step berikutnya adalah melihat hubungan antara Model dengan Controller. Struts2menggunakan Spring, dapat ditemukan pada folder /src/java/resource/ApplicationContext.xml.Berikut adalah potongan XML injectionnya. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
  • 13. p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost:3306/yama" p:username="root" p:password="" /> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" p:dataSource-ref="dataSource" p:configLocation="classpath:hibernate.cfg.xml" /> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory" /> <tx:annotation-driven/>Ada 3 bean dalam XML diatas yaitu dataSource, sessionFActory, dan transactionManager, dan sebuah tx.Artinya didalam container Spring terdapat hubungan dataSource dengan jdbc, dan sessionFactoryberhubungan dengan Hibernate dan dataSource, coba lihat p:dataSource-ref dan p:configLocation.Bekerja dengan Controller Struts2 pada Cimande.Kunci dari hubungan Struts2 dengan Hibernate, dan mengutilisasi Spring tentu saja, adalah didalam settingStruts yang menggunakan spring, dapat ditemukan pada struts.properties, yaitu struts.objectFactory = spring.Nah otomatis setiap kita membuat sebuah Action, dapat menggunakan Spring sebagai container injection.Artinya bilamana setting ApplicationContext adalah seperti yang dijelaskan diatas maka kita dapatmenggunakan injection yang ada didalam controller kita, dan melemparnya ke lapisan presentasi. Cimandemenggunakan Velocity untuk presentasinya.Kode sumber Cimande, mengimplementasikan DAO, Service, dan Controller, untuk kasus obyek Person,implementasinya adala PersonDAO, PersonService dan PersonController. Tetapi untuk kasus Person ini kitatidak menggunakan PersonDAO dalam obyek, tetapi ditaruh di dalam entity, dengan @NamedQuery.Dimana getPersons, getPersonChilds, getChildCandidate, dan findPersonsByFirstName adalah obyekPersonDAO. Implementasi DAO yang sebenarnya dapat melihat Item, yang disertakan dalam distribusiCimande. Yah dibuat kasus ini, sehingga tahu, dapat melakukan implementasi lainnya selain model yangumum.Nah kita memasuki area Controller, yaitu PersonController, mekanisme ini ditemukan pada saat RESTplugins struts2.Yang patut diperhatikan adalah @Actions. Untuk PersonController adalah sebagai berikut:@Actions({ @Action(value = "/person", results = { @Result(name = "GET", type = "velocity", location = "/WEB-INF/velocity/person/person-add.xhtml"), @Result(name = "POST", type = "redirect", location = "/person"), @Result(name = "input", type = "velocity", location = "/WEB-INF/velocity/person/person-add.xhtml") }),Action dan Result adalah satu paket, dimana dalam implementasi struts2 terdahulu adalah package. Dimanaaction value adalah /person, sehingga artinya untuk GET adalah dengan mengakseshttp://localhost/cimande/person, dan otomatis sebuah form add akan ditampilkan. Form baru tersebutmengakses person-add.xhtml.Yang menarik dari action diatas otomatis termap dengan method. Action value /person dengan result name“GET”, akan terhubung dengan personGet().
  • 14. Mekanisme pemetaan dapat melihat CimandeActionMapper, pada paketorg.blueoxygen.cimande.rest.mapper.Untuk template dapat diakses di /WEB-INF/velocity.Bekerja dengan Yama.Untuk membuat komparasi dari pengembangan aplikasi berbasis MVC yang telah dijelaskan yaitu Cimandedari BlueOxygen. Kami mengembangkan framework lagi bernama Yama yang menggunakan SpringMVC.Sehingga kita dapat membandingkan kelebihan dan kekurangan Struts dan SpringMVC.Kami membuat Person obyek yang sama, tetapi untuk Yama, kamu mengimplementasikan PersonDAO,PersonService, dan PersonController. Mengacu pada mekanisme Cimande.Mari kita ulas lebih lanjut dari proyek Yama ini. Sehingga dapat menjadi gambaran implementasi MVC lebihlanjut, dan tentu saja kode ini sudah REST enabled semua. Hanya belum ada fitur keamanan, yang manaakan dibahas setelah bab ini.PersonController didalam Yama @Autowired private PersonService personService ; @RequestMapping(value="/person", method=RequestMethod.GET) public ModelAndView person(HttpServletRequest request,HttpServletResponse response) throws Exception{ ModelAndView mv = new ModelAndView(); mv.addObject("person", new Person()); mv.setViewName("person/person-add"); mv.addObject(personService.getRelations()); return mv;
  • 15. }Mekanisme SpringMVC mengelola controller semuanya ditaruh didalam satu method yang returnModelAndView, dimana mekanisme mappingnya sama dengan Struts2, yaitu @RequestMapping dgvaluenya adalah URInya, untuk template adalah adalah isi dari setViewName, dalam kode diatas adalahperson-add, yang akan termapping dengan person-add.xhtml.Untuk BaseDAOHibernate, sebuah data access object yang melakukan mapping hibernate dengan object,terdapat satu baris @Autowired protected SessionFactory sessionFactory, yang artinya harap segeradihubngkan dengan sessionfactory dari Hibernate, dimana settingnya dilakukan di ApplicationContext, yangtelah dibahas sebelumnya.Sedangkan implementasi dari PersonDAO, digunakan di PersonServiceImpl, dengan menambahkan barisberikut @Autowired private PersonDao personDao. Mekanisme ini secara otomatis menghubungkanPersonServices kedalam database, karena PersonDAO telah terlink dengan sesson factory hibernate.Bilamana kembali ke PersonController, terdapat satu baris di setiap ModelAndView, yaitumv.addObject(personService.getRelations()), yang mana mengisi container view dengan isi dariPersonService.getRelations().Perbandingan Yama dan CimandeProyek Yama dan Cimande sebenarnya adalah 2 kombinasi MVC yang satu menggunakan Struts2 untukCimande dan SpringMVC untuk Yama. Menggunakan mekanisme yang sama untuk injection, model, sertapengembanan DAO dan Service. Walaupun dibahas mengenai PersonDAO yang dipindahkan kedalamPerson. Sebuah mekanisme agak aneh memang dari JPA (javax.persistance.NamedQuery), yang mana dapatmembuat sebuah model menjadi DAO.

×