Galian Telkom

Hmm.... ^_^

Wednesday, September 06, 2006

ClassLoader di java

Java merupakan penganut aliran "Lazy loading" yang berarti class baru akan diload ketika akan digunakan saja. Yang berperan untuk meload semua class adalah ClassLoader. Kita harus memberi tahu ClassLoader lokasi-lokasi class yang bisa diload dengan cara mengeset ClassPath. Berikut ini perilaku ClassLoader yang saya temukan ketika dia berhadapan dengan multiple ClassPath.

Rule 1 : Class akan diload secara runtime dan dicek secara satu persatu mulai dari path pertama. Begitu namanya match, langsung load class tersebut.

Contoh Kasus :
Misalkan urutan classpathnya adalah path1;path2;path3. Misalkan lagi ClassLoader kita suruh untuk memanggil method "baca" dari class "orang", maka pertama akan dicek di path1 apakah ada class bernama "orang". Jika tidak ada, cek path2, demikian seterusnya. Jika class ditemukan, panggil method "baca" dari class tersebut. Jika method tersebut tidak ada, maka terjadi NoSuchMethodError. Jika sampai path terakhir class belum juga ditemukan, maka terjadi NoClassDefError.
- di path1 tidak ada class "Orang". di path2 ada class "Orang" yang mempunyai method "baca". => Skenario sukses
- di path2 ada class "Orang", tapi tidak punya method "baca". di path2 ada class "Orang" yang punya method "baca". => NoSuchMethodError

Rule 2 : Superclass akan diload secara terpisah

Contoh Kasus :
di path1 ada class A, sementara di path2 ada class A dan class B dimana class B extends A. Misalkan class A mempunyai method "baca". Jika ClassLoader memanggil B.baca(), maka yang dipanggil adalah method "baca" dari class A yang ada di path1.
- Jika ternyata class A yang ada di path1 tidak mempunyai method "baca" => NoSuchMethodError.
- Jika ternyata di path1 tidak ada class bernama "A" dan di path2 ada class A yang mempunyai method "baca" => skenario sukses.

Rule 3 : Interface tidak diload secara runtime. Hanya dicek namanya saja.

Contoh Kasus :
di path1 ada interface "I" yang mempunyai method "haha" dan class A yang mengimplements interface I. Di path2 ada interface "I" yang mempunyai method "hoho" dan class B yang mengimplements interface I.
- Ketika kita panggil A.haha() dan B.hoho() => pemanggilan sukses
- pernyataan "A instanceof I" dan "B instanceof I" akan menghasilkan nilai TRUE.

Sepertinya masih ada beberapa rule lagi, namun saya sudah terlalu pusing untuk mengopreknya.

Kesimpulan : JANGAN PERNAH membuat nama class dan package yang sama di path / file jar yang berbeda. Bikin pusing!!!

Sunday, September 03, 2006

Makanan Buatan

Err.... semua makanan pasti buatan kan? Naah.. yang saya maksud dengan buatan disini adalah makanan yang tidak berasal dari alam. Uhmm... wait, emangnya ada bahan yang tidak berasal dari alam?? Aahhh, oke saya ganti definisinya deh : makanan buatan disini maksudnya adalah makanan yang dibuat melalui proses kimia yang tidak alami. Hmmm... makin tidak jelas sih definisinya, tapi ngerti maksud saya kan?

Coba sekali-sekali anda perhatikan informasi komposisi makanan atau minuman favorit anda. Perhatikan ada berapa bahan yang namanya asing di telinga anda. Hampir pasti ada kan? Kalaupun tidak ada, kemungkinan besar itu karena informasinya (sengaja?) kurang akurat dengan hanya mencantumkan "pemanis", "pengemulsi" atau "perisa".

Manusia semakin banyak, sementara sawah semakin sedikit karena berubah jadi perumahan agar-gara manusianya semakin banyak. Otomatis permintaan atas makanan bertambah, sementara penawaran semakin berkurang. Kalau kata guru ekonomi saya dulu sih, hal ini akan mengakibatkan harga makanan akan bertambah. Nah, "untungnya" akibat "kemajuan" teknologi, ditemukanlah makanan-makanan buatan diatas. Butuh makanan manis? Tidak perlu gula, kan ada saccharin, siklamat atau aspartam yang manisnya bisa mencapai ratusan kali dibandingkan gula (mungkin peribahasanya juga perlu diganti : ada siklamat ada semut). Butuh gurih? Tidak perlu susah-susah meracik bumbu bermacam-macam, cukup dengan sedikit Monosodium Glutamat, beres deh semuanya. Butuh pengawet? Tidak perlu es atau garam, cukup dengan boraks atau formalin, beress ^_^.

Nah... jadi bagaimana kita menyikapinya? Yah.. buat saya sih yang penting asal jangan berlebihan saja. Apapun yang berlebihan itu pasti tidak baik. Hmm.. saya jadi ingat debat kusir waktu SMA mengenai "Apakah oksigen yang berlebihan itu bisa dikategorikan sebagai polusi?" ^_^. Bagaimana menurut anda?