Archive for the ‘Programming’ Category
Hibernate: no int please
Salah satu hal yang sering tidak terasa tapi sering menyulitkan. Menggunakan int dalam POJO pada hibernate. seperti:
@Entity
@Table(name = "TABLE_NAME")
public class Table implements Serializable {
private int id;
@Id
@Column(name="Id")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
Mengapa ? karena nilai default int adalah 0, maka setiap kali menggunakan Criteria, setiap attribute dengan tipe data int akan ikut dalam where clause. Untuk lebih amannya pakai saja Integer.
Tags: Database, Hibernate, Java
Kayaknya ganti iBatis nih..
IBatis dan Hibernate adalah dua hal yang sama tapi berbeda. Keduanya dipakai sebagai tool dan library pengembangan aplikasi, dengan dua sudut pandang yang berbeda. Gampangnya hibernate itu top down dan ibatis itu bottom up, dari sudut pandang java.
Development dengan menggunakan hibernate akan lebih efektif kalau dimulai dari domain model baru kemudian diturunkan ke database, dalam bentuk table-table. Jadi class dan table sinkron. Pada kondisi seperti inilah hibernate digunakan.
Sementara iBatis menghasilkan mapping dari query ke java class, bukan table, jadi pada saat development table didefiniskan terlebih dahulu, berbeda dengan hibernate yang akan membuat table dari classnya.
Dari sudut pandang saya sendiri sih, dari dulu saya tidak menyukai hibernate karena harus menggunakan mapping dalam bentuk xml yang menurut saya pribadi kok ribetnya sama saja dengan menggunakan jdbc. JDBC lebih mudah untuk dilihat dan jika modularitasnya jelas, gampang juga untuk di maintain. Dan setelah hibernate 3 support annotation, tertarik juga untuk mempelajari.
Tapi setelah beberapa hari mempelajari, ternyata memang tidak cocok dengan bagaimana saya membangun sistem yang sangat database sentris. Saya lebih suka memecahkan masalah dengan mendesign database terlebih dahulu sebelum aplikasinya. It is database based application.. jadi database dulu yang menjadi prioritas.
Dan yang seperti saya ini lebih cocok menggunakan ibatis. Walaupun dengan design yang teliti bisa juga menggunakan hibernate, tapi sifat saya yang lain, yang sangat nyaman menggunakan JDBC nampaknya juga menjadi sebab mengapa hibernate 3 ini juga tidak menarik.
So iBatis it is..
Wicket + Hibernate
Sebelum bisa menggunakan Wicket + Hibernate, saya musti belajar hibernate-nya dulu nih. Belum nanti menggunakan Spring juga..
Karena dari dulu males belajar Hibernate, jadi sekarang ini ketika sudah mulai males ngetik SQL seabrak2, dan juga kalau bikin product dengan depannya ada tulisan Spring+Hibernate+Wicket gitu tingkat kerennya lebih tinggi
, terpaksa mulai belajar dari depan.
So gimana wicket+hibernate-nya ditunda dulu ya, mumpung ada waktu belajar hibernate, disela2 ngurusin tariff dan range, saya belajar hibernate dulu.
Belajar Wicket: Model 2
Selain PropertyModel dan CompoundPropertyModel, yang sering saya gunakan adalah interface IModel. Interface ini mempunyai method yang harus diimplement load(). Contoh deklarasinya seperti dibawah
IModel model = new IModel() {
@Override
public Object load() {
return "Hasil";
}
};
IModel membuat model menjadi lebih dinamis dengan kemungkinan untuk fetch data pada runtime. Oleh karena itu untuk komponen yang refreshable, seperti table data, model yang digunakan extends dari IModel.
LoadableDetachableModel selangkah lebih dari IModel, dengan satu method lagi detach() yang fungsinya saya sendiri belum paham benar, tapi yang jelas fungsi detach() akan unload data pada model ketika tidak digunakan dan seperti IModel, akan menggunakan method load() ketika data akan digunakan.
Untuk contohnya, tunggu saya coba dulu ![]()
Belajar Wicket: Model
Seperti M pada MVC, Model berfungsi sebagai data holder bagi setiap komponen yang menyertakannya. Berbeda dengan Model pada MVC, maka Model pada wicket tidak bertanggung jawab terhadap persistensi data aplikasi, tetapi merupakan bagian dari View. Well sebenarnya Model pad MVC-pun tidak bertanggung jawab terhadap persistensi, tapi merupakan representasi dari data aplikasi.
Kembali ke Model-nya Wicket, setiap komponen, baik komponen sederhana seperti Label atau Input, sampai yang lebih komplek seperti untuk DropDownChoice atau DataView (komponen untuk menampilkan data-data pada table dan punya kemampuan paging) memerlukan object penampung data dan Model ini adalah object tersebut.
Constructor untuk komponen salah satunya adalah new Component(String s, Model m), jadi rasanya sangat jelas fungsi dari Model. Beberapa Model yang sering digunakan adalah PropertyModel, CompoundPropertyModel dan Model itu sendiri.
PropertyModel digunakan untuk menampung data input dalam html dengan menggunakan field yang ada pada class. Contohnya adalah :
public class Test extends WebPage {
private String hello;
public Test() {
TextField hello = new TextField("hello",new PropertyModel(this,"hello");
add(hello);
}
public String getHello() {
return this.hello;
}
public void setHello(String hello) {
this.hello = hello;
}
}
Ketika input hello diisi satu nilai kemudian disubmit, field hello pada class Test akan otomatis terisi nilai seperti pada pagenya. Jika ada proses, nilai hello dapat diambil dengan getHello. It’s that simple ![]()
CompoundPropertyModel adalah model yang menggunakan object lain sebagai data holder bagi page. Model ini sangat mempermudah development aplikasi karena kita bisa definisi data sebelum page dibuat. contoh: public class TestData {
private String hello;
public String getHello() {
return this.hello;
}
public void setHello(String hello) {
this.hello = hello;
}
}
public class Test extends WebPage {
public Test() {
TestData data = new TestData();
CompoundPropertyModel model = new CompoundPropertyModel(data);
Form form = new Form("testForm",model);
form.add(new TextField("hello"));
add(form);
}
}
Cukup rumit jika hanya digunakan untuk satu field, tapi akan sangat terasa kalau class datanya punya banyak field. Dan akan sangat handy karena class data dapat digunakan sebagai parameter pada submit.
Masih ada beberapa point yang belum dibahas.. jadi masih bersambung ![]()
Tags: Java, Programming, Wicket
Belajar wicket
Membuat aplikasi berbasis web dengan wicket relatif mudah. Yang perlu dilakukan adalah :
- Download wicket dari sini
- Setup project dengan IDE favorit. (bisa Idea, Eclipse, Netbeans, ataupun yang lainnya.. Emacs, Vim
) - Extract wicket dan tambahkan library ke project. ( wicket, wicket-extensions, slf4j-api: yang ini harus search deh )
- Set web.xml. Untuk versi 1.3, wicket sudah memakai filter, selain pilihan menggunakan servlet. contohnya adalah :
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns<img src='http://catatankecil.masdrag.com/smilies/yahoo_love.gif' alt=':x' class='wp-smiley' width='18' height='18' title=':x' />si="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Contoh App</display-name> <description>;Contoh Aplikasi</description> <filter> <filter-name>AppFilter</filter-name> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> </filter> <init-param> <param-name>applicationClassName</param-name> <param-value>contoh.ContohApplication</param-value> </init-param> <filter-mapping> <filter-name>AppFilter</filter-name> <url-pattern>/*&</url-pattern> </filter-mapping> </web-app>
- Buat class contoh.ContohApplication, seperti para web.xml diatas. File ini adalah pintu dari aplikasi dengan framework wicket. Class ini nantinya akan memanggil class lain yang merupakan turunan dari WebPage untuk menjadi page pertama yang muncul dari aplikasi. Contoh :
package contoh; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.Session; import org.apache.wicket.Request; import org.apache.wicket.Response; import contoh.Hello; public class ContohApplication extends WebApplication { @Override public Class getHomePage() { return Hello.class; } } - Seperti dapat dilihat diclass ContohApplication, ada method getHomePage yang di override untuk mengeluarkan Hello.class. Secara defaul, aplikasi akan memanggil method getHomePage, jadi selanjutnya adalah membuat class Hello yang merupakan turunan dari WebPage. Contoh :
package contoh; import org.apache.wicket.markup.html.basic.Label; class Hello extends WebPage { public Hello() { add(new Label("hello","HELLO")); } } - Langkah terakhir adalah membuat html page sebagai tampilan dari page yang sudah kita buat. Wicket akan mencari file html dengan nama yang sama dengan class yang tadi kita bikin. Jadi sekarang kita buat file Hello.html.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Hello</title> </head> <body> <span wicket:id="hello">[Hello]</span> </body>
There you go. Aplikasi siap dijalankan.
Sedikit penjelasan, ketika html di parse oleh wicket, wicket akan mencari id yang sama dengan yang ada di class, jadi seperti contoh diatas, pada class ada deklakasi penambahan komponen Label ke page add(new Label("hello","HELLO")) dan pada html <span wicket:id="hello">[Hello]</span>. Secara otomatis, wicket akan merubah wicket:id=”hello” menjadi string Hello.
Enjoy.
Tags: Java, Programming, Wicket
Kenalan Wicket yuk..
Wicket adalah java framework untuk develop aplikasi berbasis web. Kalau mau baca-baca sumbernya langsung atau sekalian donlot dan coba, bisa dicari disini.
Yang membuat saya merasa senang dengan framework ini adalah bahwa wicket berbasis komponen, yang berarti komponen web seperti input, tombol dan sebagainya sudah ada di framework. Dan diharapkan juga nanti ada komponen semacam table, grid dan komponen lain yang lebih komplek.
Dan juga karena wicket menggunakan event sebagai flow dari aplikasi, bukan controller-action, maka aplikasi dari wicket akan lebih berbau aplikasi desktop daripada aplikasi web. Jadi setiap komponen dalam aplikasi yang dibangun dengan wicket juga merupakan event-source dari behavior aplikasi. Ketika tombol saya tekan, maka aplikasi akan bereaksi terdapat penekanan tombol tersebut.
Penekanan terakhir terhadap framework ini adalah bahwa aplikasi yang dibangun akan bersifat stateful. Jadi berbeda dengan framework lain, wicket akan menyimpan state dari page yang tampil di layar. Drawbacknya adalah setiap perubahan dilayar juga harus dilakukan di server. Untuk perubahan static (seperti form entry) tidak berbeda dengan aplikasi lain, tapi untuk form yang lebih komplek, misalnya list yang akan mengupdate field lain, hal ini akan membuat aplikasi lebih komplek karena harus selalu diupdate ke server.. hmm.. which is sebenarnya sih sama saja ya.. bahkan menjadi lebih mudah.
Dengan didukungnya AJAX out of the box ( langsung bisa dipakai ), development aplikasi menjadi jauh lebih cepat dan menyenangkan. Penggunaan AJAX bahkan tanpa perlu kita tau javascript
komponen AJAX sudah tersedia di wicket.
Oh ya, yang paling penting malah terlupakan. Wicket menggunakan teknologi java yang paling kuno, yaitu pure OOP. Page adalah sebuah class yang diturunkan dari class lain..
Jadi bagi yang kuat konsep OOP-nya, akan sangat gampang mempelajari wicket.
Tags: Java, Programming, Wicket
JSON
JSON adalah singkatan dari JacaScript Object Notation. Maksudnya apa, masih gak jelas juga :lol:
Hanya saja dengan notasi ini kita tidak perlu lagi menggunakan format XML untuk komunikasi data ketika menggunakan Ajax. Keunggulan JSON dibanding dengan XML adalah jumlah byte yang ditransfer dari webserver lebih kecil, dan dengan menggunakan fungsi eval dari javascript, otomatis data dari JSON text menjadi object dalam java script.
Format JSON adalah seperti ini :
<code>
{ “name”:value}
{
“status”:”success”,
“data”:
{
“code”:1,
“name”:”satu”
}
}
{
“status”:”success”,
“data”:[
{
“code”:1,
“name”:”satu”
},
{
“code”:2,
“name’:”dua”
}
]
}
</code>
Sebenarnya JSON juga bisa menampung rutin dari javascript, tapi sementara ini, hanya data yang saya pakai, jadi format diatas yang muncul hehe.
Apapun yang menghasilkan, baik itu servlet, php atau jsp, asalkan format yang digunakan benar, data tetap valid, maka bisa digunakan di web based client.
Pemakaiannya bersambung deh hehe…
Tags: Ajax, Javascript, JSON
Singleton vs static
Kedua jenis class ini sangat mirip dalam penggunaannya, dengan perbedaan jika class singleton, dalam satu sesi aplikasi, hanya ada satu object yang diinstantiate, sedangkan static class ( class yang hanya terdiri dari static method ) tidak pernah ada instance yang dibuat, sesuai dengan sifat method-nya. Satu lagi, karena static class tidak pernah di instantiate, maka static class tidak dapat menyimpan state, atau bisa saja dengan menggunakan variabel static. Hmm.. jadi tidak bisa dibilang berbeda dong haha.. Tapi kalau tidak salah variabel tersebut tidak bisa diakses karena class tidak di instantiate, yang berarti variabel tersebut tidak pernah ada.
Hanya saja karena kemiripan penggunaan, yaitu kebutuhan akan instance yang hanya satu (atau tidak ada instance sama sekali) pada satu sesi aplikasi, maka kadangkala bingung juga mana yang harus dipakai.
Setelah luntang lantung ke beberapa situs ( lewat google hehe ) ternyata ada satu hal yang harus digunakan dalam mempertimbangkan metode yang dipakai. Yaitu perbedaan siat keduanya, penyimpanan state, dan satu lagi polymorphism.
Jika state class diperlukan dalam aplikasi, atau jika pada satu saat nanti class akan di extend, singleton lebih layak dipakai. Jika method hanya digunakan untuk memproses data, tapi penyimpanan data dalam class, pakai static method.
There you go!
( biar gak lupa hehe )
Tags: Java, Programming, Singleton, Static
Kuncinya adalah proses bisnis!
Ketika sarapan tadi saya sempat kepikiran mengenai proyek terakhir yang saya kerjakan. Proyek yang sebenarnya tidak berbeda dengan proyek-proyek lain, hanya saja unik karena proyek pekerjaan saya pada proyek ini adalah semacam disaster recovery.
Proyek ini seharusnya berakhir pada desember 2006, dari mulai pengerjaan oktober 2006. Tetapi karena perusahaan yang diberi wewenang untuk mengerjakannya ternyata tidak dapat memenuhi deadline sesuai kesepakatan ( dengan kata lain subkonnya ngaco ), maka akhirnya saya dan beberapa teman diterjukan.
Recoverynya sendiri berjalan dari pertengahan desember sampai pertengahan maret 2007. Selama tiga bulan. Tidak berbeda dengan waktu yang seharusnya menjadi tanggung jawab subkon. Kalau dipikir-pikir jadi tidak berbeda dong tim saya dengan subkon tersebut ?
To our defence ( hehe bahasanya ), tim saya berangkat dengan posisi sebagai programmer semua, jadi kita nanti dibawah subkon yang memang selama ini menjadi team leader dari proyek. Dan karena posisi sebagai programmer, yang dikerjakan haya level programming, tidak mencakup scope yang lebih luas. Kemudian pada bulan januari, ketika kemudian subkon tidak lagi mau mengerjakan, kami mulai harus memikirkan semua aspek dari aplikasi, mulai dari proses bisnis, core dan sistem pendukung pada aplikasi dan pengerjaannya sendiri.
Dan itu yang benar-benar menghabiskan waktu. Saya merubah modul yang saya kerjakan sampai empat kali karena harus menyesuaikan dengan proses bisnis ( pada saat pertama dibuat, masih merujuk ke dokumen dari subkon, yang ternyata tidak sesuai dengan proses bisnis ), dan perubahannya, serta karena harus menyesuaikan dengan sistem pendukung ( database connection pooling ). Dan itu juga terjadi untuk semua modul yang kami kerjakan.
Jadi selama tiga bulan ini kami mengerjakan modul yang sama berulang-ulang karena satu dan lain hal. Jadi pengerjaannya sampai tiga bulan.
Sekarang ini sih ketika bisa berpikir lebih jernih, hal tersebut tidak boleh terjadi lagi..
- Tidak usah lagi menggunakan subkon selama masih bisa dikerjakan sendiri, which means total control.
- Apapun situasi proyek, hal yang paling penting sebelum mulai mengerjakan adalah tahu sasaran pengerjaan, yaitu proses bisnis.
- Sebelum pengerjaan dimulai ( menyambung dari point 2 ), harus tahu juga secara garis besar sistem yang akan kita kerjakan atau seperti kasus ini sistem yang ada.
- Untuk kasus seperti ini, yang pertama kali harus dikerjakan adalah mempelajari bisnis proses terlebih dahulu.
- Berulang-ulang tapi penting, yaitu pemahaman atas bisnis proses.
- Jika tidak berhasil, kembali ke point 2 :lol:
Hambatan yang paling besar adalah bahwa pada deadline, kustomer pasti ingin melihat hasilnya. Dan pasti tidak akan berhasil dengan target pertama pengerjaan adalah proses bisnis. Tapi tanpa hal itu, yang terjadi adalah seperti yang saya alami, yaitu pengerjaan hal-hal yang sama berulang-ulang. Oleh karena itu, hal pertama yang harus diselesaikan adalah proses bisnis.
Yang dapat dilakukan adalah dengan membagi waktu tersisa dari proyek untuk mempelajari bisnis proses, seminggu atau dua minggu, baru kemudian, harus dengan kerja keras, membangun aplikasinya. Sama saja dengan pembangunan aplikasi secara normal yah.. oh well :lol:
Tags: Kerja, Kustomer, Proses Bisnis
