<$BlogRSDUrl$>

Tuesday, May 31, 2005

Tambahan

Hmmm... Menarik. Buat kali pertama, saya tak dpt trace error dgn menggunakan java.lang.Exception. Dlm salah satu method saya, selepas meletakkan beberapa debugging statement, code tersebut lalu beberapa line awal kemudian tiba2 lompat keluar. Ini adalah tanda ada exception berlaku dan utk dpt tahu exception apa, guna aje la try..catch dgn Exception ni dlm catch. Tapi, kali ni, tak berjaya. Masih tiba2 lompat keluar. Pelik betul. Rupa2nya, ia adalah error yg lebih fatal lagi dan hanya berjaya saya catch apabila menggunakan java.lang.Throwable.

Sebabnya, hanya la krn ada jar yg tak cukup. Cis!


Content with Style

Domain Logic and SQL

The Empire Strikes Bush


ITTutor

Dpt email dpd 1kHz tentang ITTutor keluar dlm akhbar kosmo. Tahniah atas kejayaan mendapat liputan media. Semoga semakin ramai yg mengenali dan bergiat aktif dlmnya.


Penerangan tentang hubungan antara Object

Terjumpa link lama ke ITTutor semasa menziarahi blog 1kHz:

dlm oop, 1 object boleh ada hubungan dgn object lain. hubungan tu berbeza kekuatannya, antaranya:
1. inheritance
2. composition/aggregation
3. association

cthnya ada 1 object Mamat yg merupakan anak kpd object Mat. Semua ciri2 (data/field) spt mata biru, kulit merah, dll diwarisi Mamat dpd Mat. Begitu juga sifat2 dan perangai (methods) Mamat spt rajin membaca, laju lariannya, dll, juga diwarisi dpd bapanya iaitu Mat. Mamat pun boleh ada ciri atau perangai yg tidak diwarisi spt kepandaian dan kecekapan sms yg bapanya tak ada.

Object Mamat ni juga, terdiri (compose of) dpd pelbagai jenis object yg lain spt 2 object tangan, 2 object kaki, 1 object otak, begitu banyak object sel darah merah, dll. Hubungan composition ni amat kuat. Keluarkan object jantung dpd object Mamat ni, habis la alamatnya riwayat hidupnya. Hilangkan 2 object matanya, menyebabkan object Mamat ni cacat akibat tak boleh lihat.

Object Mamat ni juga ada sejumlah object lain yg menjadi kawannya, spt object Man, object Din, object Pian dll. Hubungan jenis ini tidak la kuat, ada selalunya dianggap sebagai association. Apa2 terjadi kpd salah satu object ini, tidak mengganggu object Mamat selain perasaan sedih.

Ada juga jenis hubungan yg lain. Nama saya tak ingat, mungkin tergolong dlm kumpulan aggregation. Saya bagi cth je. Hubungan antara object Beg dgn isi kandungannya. object Beg mungkin ada sejumlah object baju, sejumlah object buku, dll. Hubungannya lebih kuat dpd association, tapi tak la sekuat composition krn setiap object buku tu, tak bergantung kpd object Beg. Kalau dikeluarkan, object Beg tetap wujud dan object Buku tetap wujud.

sikit2 yg saya tahu/ingat...



Macam2

Java Bluetooth

(0) comments

Wednesday, May 25, 2005

Kelas OOAD

OK. Setelah diminta (berkali2) mengadakan yahoo groups atau google groups oleh 1kHz, akhirnya saya bersetuju dgn dia. Sebabnya krn sebelum ini, saya lebih tumpukan perhatian saya kpd kelas ooad dan bukan sangat kat email. Ini krn, utk saya, email bukanlah satu cara utk belajar ooad yg berkesan. Ini mungkin krn kekurangan diri saya sendiri yg kurang pandai mengajar orang. So, saya lebih berminat utk mengadakan kelas sebulan sekali. Kat situ, face to face, pertanyaan boleh diajukan. Malangnya, kesibukan masing2 tidak mengizinkan, selain kelas tunggal yg diadakan beberapa bulan lepas.

Setelah 3 bulan berturut2 tak berjaya diadakan kelas, saya dah terima hakikatnya, bhw, terpaksa la melalui email aje. Dan tahap yg boleh saya sampai, juga adalah terhad. Kalau ikutkan hati, terasa malas pulak nak teruskan group ini. Tapi, selagi ada yg nak belajar ilmu ooad, walaupun dgn cara yg terhad iaitu melalui email, maka, saya akan berusaha utk bantu.

So, utk mereka yg berminat, sila cadangkan nama group ini dan beritahu bhw anda berminat utk join. Saya hadkan group ini kpd muslim shj dan hadkan group ini kpd private, iaitu hanya ahli shj yg boleh lihat dan post.


Macam2

Free Book from Java BluePrints. Buku free dari Sun. Mari-mari, free-free, mari-mari.

How to Use Design Patterns. Satu temu bual yg amat menarik dgn salah seorang guru design patterns, Erich Gamma.

Utk saya, satu cara utk guna design patterns dlm sw dev kita ialah dgn tidak memikirkan design patterns in the first place. Saya lebih tumpu kpd object modeling menggunakan analysis patterns dan patterns peter coad. Apabila dah implement beberapa use cases dan melakukan refactoring, bolehlah dimasukkan sekali mana2 design patterns yg sesuai. Usah paksa diri utk memuatkan juga design patterns ke dlm design kita.

Disebabkan ini, nilai design patterns, walaupun masing sangat berguna, ia bukanlah the only one yg perlu saya khatam dan master. Ilmu object modeling dan pelbagai analysis patterns juga tak kurang hebat dan bergunanya.

Dgn kehadiran aspects (AOP), ia semakin compliment proses ini. Dan, dgn kehadiran IoC menggunakan Spring, ia juga semakin compliment proses ini. Maksud compliment di sini ialah, kelemahan2 yg ada dlm existing proses sikit2 diatasi.

AOP memberikan saya the extra mile towards a design that is resilient to change dan memudahkan saya melakukan design pattern tertentu spt decorator, chain of responsibility dan banyak lagi yg mana sebelum ini, saya kena rombak / cleanup banyak gak code.

Spring pulak menyusun variable2 yg sepatutnya jadi constant atau dlm master properties file yg sebelum ini bersepah sama ada kat dlm source code mahupun kat dlm sejumlah properties files. Of course, susun dependencies antara objects juga lebih kelihatan dan teratur.

Alhamdulillah.

(3) comments

Monday, May 23, 2005

Spring

Berjaya upkan scheduler dlm spring. Masalah yg dihadapi dulu ialah krn:
1. salah faham xml dia.
2. salah jar. File quartz.jar yg ntah version berapa ntah yg ada dlm lib saya. Ganti dgn quartz.jar yg datang sekali dlm distribution spring.

Tapi, kena execute dulu Application Content supaya baca xml file tentang bean definition, baru la scheduler akan berjalan.

Dah semakin banyak bean yg saya masukkan ke dlm spring. Rasa2nya dah semakin faham Spring IoC ini. Spt biasa, perlunya perubahan paradigma utk memahai sesuatu ilmu/teknologi dgn lebih mendalam. Dan spring juga, walaupun perubahan paradigma yg perlu dilalui adalah sedikit/kecik berbanding dgn masa nak faham OOAD dulu.

Nanti la. Ada banyak gak yg nak ditulis utk dikongsi bersama ilmu tentang Spring ini. Masa belum mengizinkan.


Macam2

Wire Hibernate Transactions in Spring.

Developing for the Web with Ant, Part 1.

Setting up a Secure Subversion Server.

Commons HttpClient.

Pure Java Education Center.

Multipart Internet Mail Extensions (MIME).
MIME Reference.

Tech Talk: Matt Raible on AppFuse and Spring Live. Rupa2nya, tss rakam perbincangan ini disember 2004 dan baru sekarang release. Material lama daa.

"Three Minutes to a Web Service".

(0) comments

Wednesday, May 18, 2005

Spring

Tak sempat nak post bhgn seterusnya tentang Spring. Kesibukan nak kena deploy 1st jun ini membuatkan nak post link2 yg pada saya menarik pun susah. Tapi, kena post gak. Krn, blog ini paling tidak adalah rujukan utk diri saya sendiri. Sape2 yg merasa faedah dpdnya, all the better :)

Buat masa ini, sangkut kat scheduler menggunakan Spring. Ntah kenapa tak leh run spt dlm buku. Yg peliknya, sesetengah bean yg dideclare dlm applicationContext.xml tu mampu menyebabkan bean2 yg a ok sebelum ini, tiba2 je tak jalan. Bila commented out sesetengah bean itu, baru jalan balik. Nampaknya, error yg dihasilkan oleh sesetengah bean ini mampu mengganggu alam persekitaran Spring. Kena extra berhati2 bila menambah bean declaration.


Code gen

Sebelum kena tugas agak mengejut yg kena siap 1st jun tu, saya sempat modify code gen saya supaya menjanakan data class yg compatible antara kedua2 castor dan hibernate. Masalah yg timbul ialah dlm kes 1..* yg saya implement menggunakan java.util.Collection. Implementation class sama ada java.util.ArrayList atau java.util.HashSet. Ia berjalan lancar dgn castor. Masalahnya, hibernate nak lebih khusus iaitu sama ada java.util.Set atau java.util.List. Godek punya godek, akhirnya settle. Setakat ini la. Mungkin akan jumpa masalah berkaitan in the future.

Hooray! Code gen saya dah diupdatekan supaya boleh jana basic hibernate xdoclet tags dlm source code utk membolehkan xdoclet jana mapping files. Next, bila sempat, nak masukkan hibernate dlm projek saya sekarang ini menggantikan castor. Nak guna Spring sekali. DAO class nak dijana secara auto utk menggunakan HibernateTemplate dlm Spring.

Bulan depan la nampaknya.


Macam2

Intro to the Spring Framework.

MINA 0.7.1 Released: A Network Application Framework

dotCMS CMS/Portal 1.0 Released

Storing Session State on the Client. Perbincangan theserverside.

Gosling introduces discord in his view of Harmony

'Geronimo! The J2EE 1.4 engine that could' on dW. Perbincangan theserverside.

(0) comments

Sunday, May 15, 2005

Hibernate in Action

2 bab yg amat penting dlm buku ini ialah bab 7 dan bab 9. Bab 9 adalah berkenaan tools yg berguna dan mengcomplement Hibernate itu sendiri.

Antara yg saya minati ialah:

SchemaExport

Ia digunakan utk menghasilkan sql utk create 1..* table2 dpd mapping hibernate. Ia juga boleh digunakan utk create table tersebut terus ke dlm database kita. Best gak.

Cara utama (utk saya la) utk menggunakannya ialah dlm ant. Masukkan task definition berikut ke dlm file build.xml:

<target name="schemaexport">
<taskdef name="schemaexport"
classname="net.sf.hibernate.tool.hbm2ddl.SchemaExportTask"
classpathref="class.path"/>
<schemaexport
properties="hibernate.properties"
quiet="no"
text="no" drop="no"
delimiter=";"
output="schema-export.sql">
<fileset dir="src">
<include name="**/*.hbm.xml"/>
</fileset>
</schemaexport>
</target>


dan panggil aje la target tersebut selepas, katakan berjaya compile semua class yg ada.


SchemaUpdate

Ia digunakan utk mengupdate table sedia ada dlm database, sama ada utk menghasilkan column baru, atau buang table / column lama yg dah tak pakai dah. Masukkan task definition berikut ke dlm file build.xml:

<target name="schemaupdate">
<taskdef name="schemaupdate"
classname="net.sf.hibernate.tool.hbm2ddl.SchemaUpdateTask"
classpathref="class.path"/>
<schemaupdate
properties="hibernate.properties"
quiet="no">
<fileset dir="src">
<include name="**/*.hbm.xml"/>
</fileset>
</schemaupdate>
</target>



XDoclet

Ia digunakan utk hasilkan hibernate mapping files dpd doclet yg ada dlm Java class. Masukkan task definition:

<taskdef name="hibernatedoclet"
classname="xdoclet.modules.hibernate.HibernateDocletTask"
classpathref="class.path"/>


dan guna ia dlm target:

<target name="xdoclet">
<hibernatedoclet
destdir="mappings/"
excludedtags="@version,@author,@todo"
force="true"
mergedir="generated_mappings/">
<fileset dir="src">
<include name="**/org/hibernate/auction/*.java"/>
</fileset>
<hibernate version="2.0"/>
</hibernatedoclet>
</target>


bersambung utk bab 7...

(0) comments

Wednesday, May 11, 2005

Tambahan Spring

OK, version kedua utk class ServiceProviderFactory:

package org.company;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ServiceProviderFactory
{
private static final String[] ZONES = new String[] {"poslajuZone", "fedexZone", "tntZone"};
private static final String[] RATES = new String[] {"poslajuRates", "fedexRates", "tntRates"};

private static ApplicationContext context = new ClassPathXmlApplicationContext("appsContext.xml");

public static ISPZone getSPZone(PriceCriteriaData pcd)
{
return (ISPZone)context.getBean(ZONES[pcd.getServiceProviderType()-1]);
}

public static ISPRates getSPRates(PriceCriteriaData pcd)
{
return (ISPRates)context.getBean(RATES[pcd.getServiceProviderType()-1]);
}
}


Class di atas dah lebih ringkas dan kemas. Apa2 penambahan jenis class ISPZone dan ISPRates hanya akan menambah kat constant ZONES dan RATES shj (selain penambahan kat class PriceCriteriaData utk tambah constantnya dan file appsContext).

Saya merasakan cara ini lebih kemas krn class factory ini semamangnya mempunyai coupling dgn id dlm file appsContext.xml. Jadi, id-id ini tak leh dibuang. Instead of ia bercampur dgn code if - else, dgn meletakkan ia dlm constant class ini, coupling masa sama, tapi code lebih kemas. Itu aje la reasoning saya. Boleh terima???


Tambahan lagi

OpenLDAP

ApacheDS dan perbincangan tentangnya kat theserverside.


Tambahan Spring

Perrgghh!! Massive betul penambahan kpd Spring. Banyak betul yg dah diintegratekan dgnnya. Jenuh nak baca dan mencuba setiap satu. Spring ni macam runaway train. Boleh kejar ke ni...?


Macam2

P2P RMI

SwingX: Consider JXHyperlink As An Alternative To Buttons

Spring Web Flow

Buku Spring Live dgn sample chapter yg menarik tentang Spring, Hibernate dan Struts.

Spring Framework 1.1.5 sekarang dah mempunyai support yg agak baik utk AspectJ! Best! Dan mereka akan tambah support dlm Spring ver 1.2 yg sedang dibuat sekarang. Semakin best! :D


Spring, percubaan pertama

Setelah begitu lama menangguh, akhirnya saya mencuba juga, menggunakan Spring IoC. Percubaan saya ialah terhadap satu class Factory yg memulangkan class utk cari zon dan harga.

Kelas asal berwajah spt berikut:

package org.company;

public class ServiceProviderFactory
{
public static ISPZone getSPZone(PriceCriteriaData pcd)
{
if (pcd.getServiceProviderType() == PriceCriteriaData.TNT)
return new TntZone();
else if (pcd.getServiceProviderType() == PriceCriteriaData.POSLAJU)
return new PosLajuZone();
return null;
}

public static ISPRates getSPRates(PriceCriteriaData pcd)
{
if (pcd.getServiceProviderType() == PriceCriteriaData.TNT)
return new TntRates();
else if (pcd.getServiceProviderType() == PriceCriteriaData.POSLAJU)
return new PosLajuRates();
return null;
}
}



Selepas dimasukkan Spring IoC ke dlm class ini, rupanya begini plak:

package org.company;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ServiceProviderFactory
{
private static ApplicationContext context = new ClassPathXmlApplicationContext("appsContext.xml");

public static ISPZone getSPZone(PriceCriteriaData pcd)
{
if (pcd.getServiceProviderType() == PriceCriteriaData.FEDEX)
return (ISPZone)context.getBean("fedexZone");
else if (pcd.getServiceProviderType() == PriceCriteriaData.TNT)
return (ISPZone)context.getBean("tntZone");
else if (pcd.getServiceProviderType() == PriceCriteriaData.POSLAJU)
return (ISPZone)context.getBean("poslajuZone");
return null;
}

public static ISPRates getSPRates(PriceCriteriaData pcd)
{
if (pcd.getServiceProviderType() == PriceCriteriaData.FEDEX)
return (ISPRates)context.getBean("fedexRates");
else if (pcd.getServiceProviderType() == PriceCriteriaData.TNT)
return (ISPRates)context.getBean("tntRates");
else if (pcd.getServiceProviderType() == PriceCriteriaData.POSLAJU)
return (ISPRates)context.getBean("poslajuRates");
return null;
}
}


File appsContext.xml plak berada dlm web-inf/classes:
<beans>
<bean id="tntZone" class="org.company.TntZone"/>
<bean id="poslajuZone" class="org.company.PosLajuZone"/>
<bean id="tntRates" class="org.company.TntRates"/>
<bean id="poslajuRates" class="org.company.PosLajuRates"/>
</beans>


Tak nampak banyak beza. Tapi, ada 1 cara mudah utk perkemaskan code ini. Bersambung...

(1) comments

Tuesday, May 03, 2005

Tip2 kerja utk fresh grad yg baru dpt kerja

1. Kebanyakan syarikat apabila ambil anda bekerja, mereka mempunyai rancangan utk melakukan sesuatu kerja/projek/etc dgn tenaga anda. Jika anda diterima bekerja di syarikat tersebut, fikir la masak2, nak join atau tidak. Kalau setuju join, stay la sekurang2nya 3 ke 6 bulan. Jgn la join semata2 sebagai batu loncatan krn banyak syarikat tak suka anda resign selepas baru 1 ke 2 minggu join. Stay around dulu. Bagi peluang kpd syarikat utk memberikan challange kerja kpd anda supaya anda dpt belajar dan dpt pengalaman.

2. Ada sekumpulan fresh grad ni yg meletakkan gaji sebagai priority no 1. Mana2 company yg bagi gaji yg paling besar, ke situ la hasratnya. Pada saya, gaji memang penting, tapi bukan no 1. Peluang utk belajar dan timba pengalaman adalah lebih berharga dpd kerja kat tempat gaji yg besar tapi pengalaman dan ilmu kurang / hari2 itu aje. Ini krn, ilmu dan pengalaman yg jitu dan padat yg berjaya dikumpul dlm tempoh 4 ke 5 tahun, mampu meningkatkan nilai anda berlipat kali ganda. InsyaAllah, anda mampu menyaingi, bahkan menandingi gaji rakan2 yg lebih besar berbanding dgn anda masa mula2 grad dulu. Ini krn ilmu dan pengalaman yg mantap dan berjaya diperolehi dpd usaha pahit dan getir, tidak dimiliki oleh ramai orang. Bukan shj ramai yg tak lepas, ramai gak yg tak berpeluang utk melaluinya. Lihat la kpd mid to long term. Usah lihat short term == gaji besar, krn belum tentu tempat yg beri gaji besar itu memberikan anda peluang terbaik utk belajar dan cari pengalaman.

Benarlah, kita yg kena jaga duit, tapi ilmu yg jaga kita.


Tambahan

Secure data files embedded in MIDP applications

Beginning J2ME: Building MIDlets

Measure test coverage with Cobertura. Cobertura home page.

Quick and Easy Custom Templates with XDoclet.

Generic Types, Part 2. Baca la part 2 ini bersama2 dgn part 1 yg baru lepas. Bagus utk mereka yg masih belum faham java generics spt saya :(

Breaking the Last Dependency. Kpd peminat2 Design Patterns semua, satu cara nak implement factory menggunakan Java. Tapi, sebenarnya, tak de la benda baru. Lama dah, biasa dah buat benda ni dlm dunia java.

WSUnit 1.0, Web Services Testing Tool, released

SwingX: Translucent Panels 101

WYSIWYG GUI builders


Aspect Logging

Terdapat keperluan utk log semua kemasukan ke dlm method dan keluar dpdnya. Ini gara2 bugs yg agak kritikal yg kena dicari gak. Sebelum ini, saya bubuh sendiri code kat mana yg nak saya log. Sekarang, tak mampu nak bubuh kat beratus2 method yg ada. Saya guna Aspect utk lakukan logging ini. Saya ambil dan modify dpd aspect dlm buku AspectJ in Action.


import java.util.logging.*;
import org.aspectj.lang.*;

public aspect AspectTrace {
private static Logger _logger = Logger.getLogger("trace");
static {
try
{
FileHandler fh = new FileHandler("gklog.txt", 10000000, 200);
fh.setFormatter(new SimpleFormatter());
_logger.addHandler(fh);
}
catch (Exception e) {
}
}

pointcut traceMethods(): execution(* org.comp.apps..*.*(..)) || execution(* org.comp.util..*.*(..)) || execution(* org.comp.submodule1.party.*DM.*(..))|| execution(* org.comp.submodule1.Aspect*.*(..)) && !within(AspectTrace);

before() : traceMethods()
{
Signature sig = thisJoinPointStaticPart.getSignature();
_logger.logp(Level.INFO, sig.getDeclaringType().getName(),sig.getName(), "Entering");
}

after() : traceMethods()
{
Signature sig = thisJoinPointStaticPart.getSignature();
_logger.logp(Level.INFO, sig.getDeclaringType().getName(),sig.getName(), "Exiting");
}
}


Mudah dan kemas.


Macam2

Web Services with Java 2 Micro Edition

Hibernate: Providing Connections for Hibernate

MP3: Play MP3s from Java with Javazoom.

Logging: Trim Down Core Java Log Messages

Compass 0.4, Search Engine/Object Mapping engine, Released - Object Search Engine (Lucene) mapper :)

Starter webapp AppFuse 1.8 Released - bungkusan pelbagai open source project, dgn Spring sebagai nadi. Menarik gak. Check out AppFuse: Start Your J2EE Web Apps.

New Version of JRockit 5.0 available for download

A plan to integrate Spring Web Flow and JSF

Visual Paradigm Training Center - macam kurang sikit. Tapi, sape2 nak cuba, silakan la.

(0) comments

This page is powered by Blogger. Isn't yours?