Road to JSF: Part I

18 05 2008

Jika itu adalah batasanmu, kau takkan dapat melampauinya. Tetapi jika kau melampauinya, itu bukanlah batasanmu. Andrew Poon

JSF (Java Server Faces) itu mudah, learning curvenya pendek, banyak yg bisa langsung bikin aplikasi dengan JSF tanpa harus ngerti konsep Servlet, tapi tidak banyak yang mengerti dasar2nya shg akan kesulitan nantinya. Artikel ini gw buat untuk temen2 yang mau memulai membangun aplikasi web dengan JSF. Lupakan JSP. Buang jauh2 itu barang, JSP telah bergerak dari Momentum menjadi Monumen.

Sudah cukup lama gw bekerja dengan JSF untuk setiap aplikasi Java yang gw develop. Pertama kali gw kenal JSF melalui Oracle ADF yang menggunakan JSF sebagai controllernya, sekitar thn 2006. Lucunya adalah saat itu gw ga tau konsep dari JSF, gw cuma klak klik dari Oracle JDeveloper, salah satu IDE Java yang dibuat oleh Oracle. Untungnya juga gw ga perlu oprek sampe ke dalam JSF-nya. Jadi praktis saat itu gw ga banyak tau soal JSF. Tapi aplikasi tetap berjalan sesuai dengan yang client mau :) Dan beberapa waktu lalu gw mengerjakan projek dengan JSF dan juga sekaligus menjadi JSF Trainer, jadi gw akan mencoba membahas konsep dari JSF.

Apa itu JSF? JSF adalah sebuah web framework standard dari Sun Microsystems. Zaman dulu, ketika kaum Java mengenal konsep MVC (Model View Controller) mereka membuat sebuah framework yang terkenal yaitu Struts. Dalam dunia MVC kita bisa bagi menjadi 2 bagian, yaitu Action-based dan Component-based. Read the rest of this entry »





Going to Enterprise with Java Training

10 03 2008

Hi all, bagi teman-teman yang tidak sempat mengikuti Training Java di liburan Imlek kemaren, kami membuka lagi training Java EE, kali ini bertempat di Jakarta selama liburan panjang di bulan Maret. Materi training sama dengan training sebelumnya dengan beberapa perbaikan tentunya. Bagi yang penasaran, silahkan lihat detail informasinya,

Pelaksanaan:
Waktu : Kamis – Minggu, 20 – 23 Maret 2008
Pukul : 9.00 – 16.00 WIB
Tempat : Jln. Gedung Hijau Raya SF 07 No. 74, Pondok Indah, Jakarta Selatan. Dekat Restaurant Obonk Steak

Materi Training:
1. Java Fundamental
2. JDBC dan DAO Pattern
3. Spring 2.5 JDBC
4. Java Server Faces 1.2
5. Richfaces Component
6. JasperReports
7. NetBeans 6.0

Trainer :
Endy Muhardin (http://endy.artivisi.com)
Ifnu Bima (http://nagasakti.or.id/roller/ifnu)
Hadikusuma Wahab (http://dhiku.wordpress.com)

Fasilitas:
1. Makan siang serta snack
2. Modul & CD Training
3. Sertifikat
4. Satu buah Pin Artivisi
5. Infocus
6. Fasilitas penginapan untuk tiga malam (tempat terbatas) Read the rest of this entry »





Training Java EE di Liburan Imlek

31 01 2008

Hi all,

Liburan imlek nanti tanggal 7, 8, 9, 10 Februari akan diadakan training Java EE.

Berikut detail trainingnya.

Trainer :
Ifnu Bima (http://nagasakti.or.id/roller/ifnu)
Endy Muhardin (http://endy.artivisi.com)
Hadikusuma Wahab (http://dhiku.wordpress.com)

Waktu dan tempat:
Tanggal : 7 – 10 Februari 2008
Jam : 9.00 – 16.00
Tempat : Jl. Palupuh 3 dalam no 2, Bantar Jati Bogor.

Materi Training:
1. Java Fundamental
2. JDBC dan Dao Pattern
3. Spring 2.5 JDBC
4. Java Server Faces
5. Richfaces Component
6. JasperReports
7. NetBeans 6.0

Informasi lebih lanjut dapat dilihat disini

Karena gw ngasi materi JSF dan Jasperreport, sedikit bocoran untuk silabusnya, Read the rest of this entry »





Software Development Stack

24 01 2008

Based on discussion in JUG Indonesia mailing list, there are currently two persons have shared their favorite development stack,

Now its my turn to share my favorite stack,

Presentation
Mojarra 1.2 with RichFaces + Tomahawk component

Templating
Facelets (really good with JSF)

Reporting Tools
JasperReport and iReport for visual designer

Business and Integration Layer
Spring Framework

Data Access
Hibernate, please note without JPA :P

Security
Spring Security, yeah it can secure your app based on URL, method, object, also EVERY component in JSF :) sluuurp

Testing
Unit testing with JUnit 4 + EasyMock
Integration testing with DBUnit
Coverage testing with Cobertura
Planning to implement JSFUnit for presentation testing

Build system
Apache Ant

Continuous integration server
Hudson

App Server
Tomcat for development, Glassfish for production

Database
MySQL for development, PostgreSQL for production

Project Management Tools
Redmine (task and bug tracking and wiki)

IDE
Eclipse is okay, but Netbeans rocks :) )

Done! Your turn please :)





Menggunakan DataSource dengan JasperReport

7 01 2008

Akhir2 ini di milis netbeans-indonesia, sering yang bertanya tentang reporting dengan menggunakan jasperreport. Oleh karena itu gw mau sedikit sharing tentang reporting tools ini. Okay, sebelumnya sharing ini gw asumsikan pembaca sudah pernah menggunakan atau setidaknya pernah mencoba untuk menampilkan report dengan data yang berasal dari database.

Ada banyak cara untuk menampilkan report, yang pertama adalah dengan memasukkan seluruh SQL ke dalam JRXML, namun pendekatan ini menurut gw kurang fleksibel. Kenapa? karena setiap ada perubahan pada tabel database kita harus mengubah kode tsb di JRXML, compile ulang menjadi jasper file, dan memastikan query ditampilkan dengan sempurna. Selain itu manipulasi dan kalkulasi terhadap row-pun sulit dilakukan, dan juga bagaimana kalo pake ORM seperti hibernate? apa mau kembali nulis SQL lagi setelah terbiasa dengan HQL? Thanks but no thanks :D

JasperReport sudah memfasilitasi hal ini dengan menggunakan konsep DataSource. Intinya adalah proses pengambilan data dipindahkan ke kode Java, dimasukkan ke dalam DataSource, dan DataSource ini tinggal diumpan ke Jasper file (hasil compile JRXML) untuk diisi(fill) dan selanjutnya diexport dalam bentuk report yang diinginkan. Jadi tidak perlu compile2 ulang JRXML lagi jika ada perubahan SQL.

Ada banyak jenis DataSource yang disediakan oleh JasperReport, namun yang paling sering gw gunakan adalah JRBeanCollectionDataSource. Dari namanya pasti bisa ditebak bahwa DataSource ini untuk menyimpan Collection of Object. Selain itu ada juga,

  • JRMapArrayDataSource untuk datasource dari array of map
  • JRMapCollectionDataSource untuk datasource dari collection of map
  • JRBeanArrayDataSource untuk datasource dari array of bean
  • JRTableModelDataSource untuk datasource dari tablemodel di swing
  • JRXmlDataSource untuk datasource dari xml

Oke langsung saja ke contoh,

Objectivenya adalah menampilkan report seluruh user yang terdaftar (yang ada dalam database). Read the rest of this entry »





10 Langkah membuat Generic DAO dengan Spring 2.5 + Hibernate

17 12 2007

Setiap mengerjakan aplikasi dengan Java EE, gw selalu terbiasa menerapkan layer untuk

  • Model atau domain sistem seperti, User, Group, Departement, dsb tergantung ruang lingkup aplikasi
  • Data Access Object atau biasa disingkat DAO, untuk menenkapsulasi akses database terhadap domain sistem misalnya UserDao untuk operasi getAllUser(), findUserById(), saveUser(), deleteUser() dsb
  • Service layer untuk mengenkapsulasi berbagai macam Dao ke dalam satu service agar mudah digunakan dari sisi client (bagian lain dari aplikasi yang mengakses kode kita), misalnya UI atau antar muka
  • UI layer untuk logika2, validasi, dan flow yang bersifat interaksi dengan user

Concern gw adalah semakin banyak atau kompleks model atau domain sistem, biasanya Dao pun akan semakin banyak dan gw cenderung melakukan hal yang sama untuk hal2 kecil dan remeh, contohnya method untuk save user dan find user (menggunakan HibernateDaoSupport dari Spring),

public class UserDaoHibernate extends HibernateDaoSupport implements UserDao {

	public void save(User user){
		getHibernateTemplate().saveOrUpdate(user);
		getHibernateTemplate().flush();
	} 

	public User findUser(Integer id){
		final User user = (User) getHibernateTemplate().load(User.class, id);
		getHibernateTemplate().initialize(user);
		return user;
	} 

}

Kalo gw mau buat Dao untuk Group ya gw lakukan hal yang sama dengan mengubah User menjadi Group dan seterusnya. Ini jelas tidak mengikuti prinsipnya pragmatic programmer DRY (Dont Repeat Yourself), solusinya adalah dengan menggunakan konsep Generic dari Java 5, yang perlu gw lakukan cuma declare class GenericDao dan setiap Dao akan extends kelas ini. Kode diatas akan menjadi,

public class UserDaoHibernate extends GenericDaoHibernate<user , ID extends Serializable> implements UserDao {
}

oh mau buat dao untuk group? gampang!

public class GroupDaoHibernate extends GenericDaoHibernate<group , ID extends Serializable> implements GroupDao {
}

Konsep GenericDao ini sebenarnya sudah cukup lama dipulikasikan, namun karena sekarang lagi booming Spring 2.5, gw akan coba sharing GenericDao dengan Spring 2.5 + Hibernate dan meminimalisir jumlah konfigurasi yang ada di xml untuk dipindahkan ke source code. Gw ga bilang konfigurasi di xml itu jelek, tapi menurut gw ga semuanya harus ada di xml dan berikut ada post yang menarik mengenai konfigurasi dengan XML vs annotation. Anyway post ttg spring 2.5 juga dibahas oleh Endy Muhardin untuk akses ke DB dengan JDBC dan akses web.Langsung saja kita bahas ttg GenericDao dengan Spring 2.5 dan Hibernate,
Read the rest of this entry »





Unit Test: Mock Objek dengan EasyMock

11 12 2007

Unit test menurut gw adalah hal yang wajib dilakukan oleh para developer modern, karena memang tidak ada alasan untuk tidak melakukan itu. Kenapa harus melakukan unit testing?

Unit test meningkatkan kualitas kode, semakin banyak kode seharusnya bug semakin sedikit. Pada fase bug fixing misalnya, prinsip “mati satu tumbuh seribu” ini hal yg lumrah jika tidak menggunakan unit test. Kualitas kode ini dapat kita peroleh karena dengan unit test akan mudah melakukan refactoring dan penambahan fitur, kenapa? karena developer bisa confident bahwa perubahan atau penambahan fitur yang dilakukan tidak berdampak terhadap modul lain. Dengan prinsip Test Driven Development, yaitu menulis test dulu baru membuat implementasi kode, membuat setiap unit terkecil (method) dari kode akan mempunyai unit test. Sehingga ketika kode sudah banyak -unit testnya juga banyak- dan pada saat developer melakukan perubahan di satu tempat, dia akan yakin apakah test2 yang sebelumnya sukses atau gagal. Dan kalopun gagal, bugnya lgsng ketahuan -tidak pada saat testing atau UAT :P – . Hal ini tentu berdampak pada cepatnya development cycle. Walopun saya setuju pada saat awal2 akan terasa lambat kodingnya tapi ini investasi yang besar seiring bertambahnya kode aplikasi.

Menurut, andrew hunt pengarang pragmatic unit testing untuk membuat unit test yang baik harus memenuhi prinsip2 utama (A-TRIP):

  • Automatic, testing harus otomatis, setiap kali perubahan developer lgsng tahu apakah kode perubahan tsb error atau impact ke modul lain.
  • Through, testing harus mencakup seluruh kode aplikasi.
  • Repeatable, diulang berapa kali pun hasilnya tetap sama
  • Independent, tidak bergantung ke objek atau modul lain
  • Professional, menulis test harus sama bagusnya dengan menulis kode.

Pada kali ini gw akan bahas syarat yang ke empat yaitu Independent. lalu bagaimana menghilangkan dependensi terhadap objek2 lain dengan mock object. Sebenarnya ada hal2 lain kenapa harus me-mock (memalsukan) objek dalam unit test. Read the rest of this entry »








Follow

Get every new post delivered to your Inbox.