Wilbert’s WebBlog

Java, Oracle, Serta Aktivitasku

Logger Factory Mini Framework

Berawal dari ide gila untuk membuat sebuah framework kecil, akhirnya saya putuskan untuk membuat framework yang sebenarnya sangat kecil sekali.. Tidak tahu juga ini bisa dibilang framework atau bukan.. Kalau misal ada yang mau mengembangkan bersama, bisa kasih komentar di artikel saya ini.. :)

Langsung saja yah, framework ini digunakan untuk mencatat setiap error atau apapun juga yang berhubungan dengan konsep Logging.. Contoh, jika anda membuat aplikasi untuk mencatat dalam sehari siapa saja yang login di dalam web anda, framework ini akan mengerjakannya dengan mudah..

Tentu saja ini masih versi alpha, masih banyak yang perlu dibenahi terutama arsitekturnya..

Anda bisa mengunduh jar nya dari sini.. Lalu masukkan di CLASSPATH anda! Sesudah itu anda bisa membuat program seperti contoh yang saya buat berikut ini :


package test;

import org.wilbert.LoggerFactory;
import org.wilbert.Logger;

public class Main2
{

    public static void main(String[] args)
    {
        LoggerFactory<Integer> l = Logger.buildLogger("D:\\log.txt");
        l.storeIn(123456789);
        l.storeIn(987654321);
        l.storeIn(1);
        l.storeIn(3);
        l.commitIn();

        System.out.println("Isi Log Setelah dicommit :");
        System.out.println("=============================");
        System.out.println(l.commitOut());

        l.storeOut(3);
        l.commitIn();

        System.out.println("\nIsi Log setelah dibuang salah satu isinya :");
        System.out.println("=============================");
        System.out.println(l.commitOut());
    }

}

Hope you like it friend! :) Give me a feedback..

7-May-2008 Posted by wilbertliu | Java, My Framework | | 2 Comments

View Untuk “Latest Article”

Hari ini hanya ngoding untuk article saja.. Kan semestinya yang boleh menulis article hanya user yang sudah terdaftar.., maka itu tidak saya buat terlebih dahulu.. Yang saya buat hanyalah view untuk mengambil article dari database dan khusus article terbaru..

Berikut yang saya buat.. Pertama, saya tambahkan ini di layout.jsp


<li><html:link action="articlelatest.do">Articles</html:link></li>

Setelah itu saya membuat satu page dan menambah baris file konfigurasi tiles menjadi seperti ini :


<%--
    Document   : article_latest
    Created on : May 5, 2008, 5:59:12 PM
    Author     : Wilbert
    Page yang digunakan untuk menampilkan artikel2 terbaru
--%>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<h2>Artikel Terbaru JUG Joglosemar</h2>
<logic:present name="latestArticle" scope="request">
    <logic:iterate id="artc" name="latestArticle" scope="request">
        <table>
            <tr class="rowH">
                <th><bean:write name="artc" property="title" /></th>
            </tr>
            <tr>
                <td><bean:write name="artc" property="detail" /></td>
            </tr>
            <tr>
                <td align="right">Author : <b><bean:write name="artc" property="author.realName" /></b></td>
            </tr>
        </table>
    </logic:iterate>
</logic:present>
<a href="#">Lihat Artikel Lainnya</a>

<definition name="article.latest" extends="base.definition">
        <put name="content" value="/page/article_latest.jsp" />
 </definition>

Dan yang terakhir saya membuat Action serta menambah konfigurasi struts nya


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.jug.joglosemar.web.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import org.jug.joglosemar.dao.hbm.ArticleDAOImpl;

/**
 *
 * @author Wilbert
 * Action untuk artikel terbaru
 */
public class ArticleLatestAction extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private final static String SUCCESS = "success";

    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    public ActionForward execute(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        request.setAttribute("latestArticle", new ArticleDAOImpl().getLastArticles());
        return mapping.findForward(SUCCESS);

    }
}

<action path="/articlelatest" type="org.jug.joglosemar.web.action.ArticleLatestAction">
            <forward name="success" path="article.latest" />
 </action>

Dan sourcecode tersebut dari 2 post sebelumnya juga sudah saya commit ke googlecode.. Bagi yang mau ikutan juga bisa checkout di http://jugjoglosemar.googlecode.com

Hasil dari view ini bisa dilihat di sini

6-May-2008 Posted by wilbertliu | Java, Proyek JUG-Joglosemar, Struts | | No Comments

Hibernate Mapping dan Konfigurasi Untuk Entity “Article”

Malam ini saya ingin sekali menyelesaikan sedikit code yang semestinya kita kerjakan bersama.. :D Maklum, sudah tidak sabar untuk membuka netbeans.. :) Saya hanya membuat hibernate mapping nya saja, serta DAO + Implementasinya..

Selebihnya untuk Struts nya saya harus break dulu, takut nanti teman satu team saya malah tidak kebagian pekerjaan.. hehehe…

Langsung saja yah, ini belum saya commit koq, termasuk 1 post sebelumnya tentang perubahan di list jugers yang saya buat..

Pertama, saya buat hibernate mapping dan POJO nya untuk entity “Article”..


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.jug.joglosemar.entity;

/**
 *
 * @author Wilbert
 * Class ini melambangkan tabel Article di database
 * yang nantinya digunakan untuk menampilkan artikel-artikel
 */
public class Article
{
    private long id;
    private String title;
    private String detail;
    private long datePost;
    private Jugers author;

    public Article() {}

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDetail() {
        return detail;
    }

    public void setDetail(String detail) {
        this.detail = detail;
    }

    public long getDatePost() {
        return datePost;
    }

    public void setDatePost(long datePost) {
        this.datePost = datePost;
    }

    public Jugers getAuthor() {
        return author;
    }

    public void setAuthor(Jugers author) {
        this.author = author;
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class table="article" dynamic-insert="false" dynamic-update="false" mutable="true" name="org.jug.joglosemar.entity.Article" optimistic-lock="version" polymorphism="implicit" select-before-update="false">
        <id name="id" column="article_id">
            <generator class="native"/>
        </id>
        <property name="title" column="title" type="string" length="150"/>
        <property name="detail" column="detail" type="string" length="500"/>
        <property name="datePost" column="date_post" type="long"/>
        <many-to-one name="author" column="author" class="org.jug.joglosemar.entity.Jugers"/>
    </class>
</hibernate-mapping>

Lalu setelah itu, saya tambahkan mapping tersebut ke dalam file konfigurasi hibernate.., yaitu di file hibernate.cfg.xml.. Berikut isi filenya :


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory name="session">
   <!-- <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/joglosemar</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password"/>-->
   
    <!-- we use datasource -->
        <property name="hibernate.connection.datasource">java:/comp/env/jdbc/joglosemar
        </property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect
        </property>
        <property name="current_session_context_class">thread
        </property>
        <property name="show_sql">true
        </property>
        <property name="hbm2ddl.auto">create
        </property>
        <mapping resource="org/jug/joglosemar/entity/Jugers.hbm.xml"/>
        <mapping resource="org/jug/joglosemar/entity/News.hbm.xml"/>
        <mapping resource="org/jug/joglosemar/entity/Event.hbm.xml"/>
        <mapping resource="org/jug/joglosemar/entity/Article.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

Dan langkah yang terakhir adalah membuat DAO + Implementasinya.. Berikut ini saya akan tampilkan DAO + Implementasi yang sudah saya buat..


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.jug.joglosemar.dao;

import java.util.List;
import org.jug.joglosemar.entity.Article;

/**
 *
 * @author Wilbert
 */
public interface ArticleDAO
{
    public void insert(Article artc) throws Exception;
    public void delete(Article artc) throws Exception;
    public void update(Article artc) throws Exception;
    public Article load(long id) throws Exception;
    public List<Article> getAllArticles() throws Exception;
    public List<Article> getLastArticles() throws Exception;
}

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.jug.joglosemar.dao.hbm;

import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.jug.joglosemar.dao.ArticleDAO;
import org.jug.joglosemar.entity.Article;
import org.jug.joglosemar.util.HibernateUtil;

/**
 *
 * @author Wilbert
 * Implementasi DAO untuk query ke database
 */
public class ArticleDAOImpl implements ArticleDAO
{
    public void insert(Article artc) throws Exception {
        HibernateUtil.beginTransaction();
        Session session = HibernateUtil.getSession();
        try{
            session.save(artc);
        }catch(Exception ex){
            throw ex;
        }
    }

    public void delete(Article artc) throws Exception {
        HibernateUtil.beginTransaction();
        Session session = HibernateUtil.getSession();
        try{
            session.delete(artc);
        }catch(Exception ex){
            throw ex;
        }
    }

    public void update(Article artc) throws Exception {
        HibernateUtil.beginTransaction();
        Session session = HibernateUtil.getSession();
        try{
            session.update(artc);
        }catch(Exception ex){
            throw ex;
        }
    }

    public Article load(long id) throws Exception {
        HibernateUtil.beginTransaction();
        Session session = HibernateUtil.getSession();
        Article artc = null;
        try{
            artc = (Article)session.load(Article.class,id);
        }catch(Exception ex){
            throw ex;
        }
        return artc;
    }

    public List<Article> getAllArticles() throws Exception {
        HibernateUtil.beginTransaction();
        Session session = HibernateUtil.getSession();
        List<Article> list = new ArrayList<Article>();
        try{
            list = session.createQuery("from Article").list();
        }catch(Exception ex){
            throw ex;
        }
        return list;
    }

    public List<Article> getLastArticles() throws Exception {
        HibernateUtil.beginTransaction();
        Session session = HibernateUtil.getSession();
        List<Article> list = new ArrayList<Article>();
        try{
            list = session.createQuery("from Article order by date_post desc limit 0,10").list();
        }catch(Exception ex){
            throw ex;
        }
        return list;
    }
}

Selesai sudah untuk pembuatan entitynya.. Perlu diperhatikan juga (bagi yang merasa team saya), kita bermain dengan 2 framework, yaitu Struts dan Hibernate.. Maka harus dipastikan kita bisa membedakan keduanya.. Jangan dicampur adukkan..! Sekarang kita coding dulu Hibernate nya, setelah itu baru kita bermain Struts nya..

Saya rasa kalau satu per satu cara memikirkannya malah lebih bagus, karena ada kerangka berpikir yang terstruktur, yaitu Struts dan Hibernate..

Mari kita membuat Struts nya hari Selasa nanti! :)

5-May-2008 Posted by wilbertliu | Java, Proyek JUG-Joglosemar | | No Comments

Penambahan Fitur Kecil di Project Web Joglosemar

Sebelum commit, saya akan mencoba menerangkan sedikit apa yang sudah saya buat.. Ini hanya perubahan kecil saja, jadi singkat saja akan saya jelaskan..

Karena berhubung team untuk pembuatan modul article dan event belum bisa berkumpul, maka saya berinisiatif untuk membuatkan fitur kecil supaya paling tidak sudah ada anggota jug-joglosemar yang mengerjakan proyek ini..

Pertama, saya membuat satu file jugers_list.jsp baru yang isinya adalah sebagai berikut :


<%--
    Document   : jugers_list
    Created on : May 4, 2008, 1:16:09 PM
    Author     : Wilbert
    Page yang digunakan sebagai view untuk menampilkan list jugers
--%>

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

<h2>Jugers List JUG Joglosemar</h2>
<logic:present name="jugersList" scope="request">
    <logic:iterate name="jugersList" id="juger" scope="request">
        <table>
            <tr class="rowH">
                <th colspan="2"><bean:write name="juger" property="id" />. <bean:write name="juger" property="realName" /></th>
            </tr>
            <tr class="rowA">
                <td rowspan="3" width="100">
                    <img src="<bean:write name='juger' property='imagePath' />" />
                </td>
                <td>
                    Universitas : <bean:write name="juger" property="universitas" />
                </td>
            </tr>
            <tr class="rowA">
                <td>
                    Email : <a href="mailto:<bean:write name='juger' property='email' />"><bean:write name="juger" property="email" /></a>
                </td>
            </tr>
            <tr class="rowA">
                <td>
                    Profile : <bean:write name="juger" property="profile" />
                </td>
            </tr>
        </table>
    </logic:iterate>
</logic:present>

Jelas setelah itu saya tambahkan konfigurasi tiles-defs.xml seperti ini :


<definition name="jugers.list" extends="base.definition">
    <put name="content" value="/page/jugers_list.jsp" />
</definition>

Supaya page yang sudah saya buat bisa diakses, maka saya sedikit mengubah file layout.jsp menjadi seperti ini :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title><tiles:getAsString name="title" ignore="true"/> </title>
        <link href="./default.css" rel="stylesheet" type="text/css" />
    </head>

    <body>
        <div id="outer">
            <div id="header">
                <h1><a href="#">JUG JOGLOSEMAR</a></h1>
                <h2>Komunitas Pengguna Java di Jogja, Solo, Semarang dan sekitarnya</h2>
            </div>
            <tiles:insert attribute="header"/>
            <div id="content">
                <div id="tertiaryContent">
                    <tiles:insert attribute="login"/>
                    <h3>Jugers Database</h3>
                    <ul>
                        <li><html:link action="jugersnew.do">Registrasi</html:link></li>
                        <li><html:link action="jugerslist.do">Jugers List</html:link></li>
                    </ul>

                    <div class="xbg"></div>
                </div>
                <div id="primaryContentContainer">
                    <div id="primaryContent">
                        <tiles:insert attribute="content"/>
                    </div>
                </div>
                <div id="secondaryContent">
                    <h3>Tentang Kami</h3>
                    <ul>
                        <li><a href="#">Visi</a></li>
                        <li><a href="#">Misi</a></li>
                    </ul>

                    <h3>Dari Jugers</h3>
                    <ul>
                        <li><a href="#">News</a></li>
                        <li><a href="#">Events</a></li>
                        <li><a href="#">Articles</a></li>
                        <li><a href="#">Gallery</a></li>
                        <li><a href="#">Download</a></li>
                    </ul>

                    <h3>Partner</h3>

                </div>
                <div class="clear"></div>
            </div>
            <div id="footer">
                <p>Copyright &copy; 2008 JUG Joglosemar</p>
            </div>
        </div>
    </body>
</html>

Langkah berikutnya adalah membuat Action untuk JugersList.. Berikut ini code nya :


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.jug.joglosemar.web.action;

import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import org.jug.joglosemar.dao.hbm.JugersDAOImpl;

/**
 *
 * @author Wilbert
 * Action untuk menampilkan list jugers
 */
public class JugersListAction extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private final static String SUCCESS = "success";

    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    public ActionForward execute(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        request.setAttribute("jugersList", new JugersDAOImpl().getAllJugers());
        return mapping.findForward(SUCCESS);
    }
}

Akhirnya file struts-config.xml tersisipi code baru seperti ini :


<action path="/jugerslist" type="org.jug.joglosemar.web.action.JugersListAction">
    <forward name="success" path="jugers.list" />
</action>

Dan perubahan yang terakhir adalah saya hanya membuat suatu direktori bernama “photos” yang ditujukan untuk menyimpan file foto dari jugers yang nantinya akan ditampilkan juga pada jugers_list..

Hasil dari fitur kecil ini bisa dilihat di gambar berikut..

Bagaimana, bisa masuk googlecode?

4-May-2008 Posted by wilbertliu | Java, Proyek JUG-Joglosemar | | 4 Comments

Menginstall Subversion

Tutorial kali ini saya buat bertepatan dengan dimulainya proyek untuk pembuatan website JUG-Joglosemar, dimana kita sudah membuat team untuk menyelesaikan beberapa modul..

Tentunya dengan bekerja team, kita harus menggunakan Subversion.. Coba baca-baca manual Subversion terlebih dahulu, karena di sini saya akan menjelaskan secara singkat saja bagaimana menginstall Subversion di lingkungan sistem operasi MS.. :)

Mengapa saya memberikan tutorial hanya untuk di lingkungan MS saja? Simpel sekali jawabannya, karena sebagian besar anggota semua menggunakan MS.., jadi saya ikut saja.. :)

Sebenarnya cukup simple, anda cukup mengunduh Subversionnya dari sini.. Simpel, tinggal klak klik saja.. Sesudah anda menginstall, coba cek lewat command prompt dengan cara seperti ini

svn –version

Kalau ada output, berarti SVN anda sudah terinstall dengan benar, sehingga anda siap untuk mengerjakan proyek dengan team anda.. Sudah jelas kan?

Integrasinya dengan netbeans, cukup lakukan langkah sebagai berikut :

  1. Jalankan Netbeans
  2. Pilih Menu Bar “Versioning”
  3. Pilih Subversion, lalu Checkout
  4. Isi semua informasi yang diminta

Sebenarnya sangat mudah untuk menginstall Subversion.., apalagi di lingkungan MS.. Selamat mencoba dan selamat mengerjakan proyek..

Hehe, proyek saya juga sudah dimulai nih bersama teman-teman JUG!! Semangat!!

3-May-2008 Posted by wilbertliu | Proyek JUG-Joglosemar, Subversion | | 10 Comments

Parameter Array Sejak Java SE 5

Menanggapi komentar-komentar dari “Bunga”, saya terkesan dengan kata-katanya.. Ia menyebutkan bahwa saya (dan termasuk kita) jangan bosan dengan hal-hal yang mendasar di dalam pemrograman Java khususnya..

Tentu itu mengundang saya juga untuk menulis sesuatu yang berbau dasar, tapi mungkin belum semua orang tahu tentang hal tersebut.. Hari ini sebelum saya tidur, saya mau menulis terlebih dahulu tentang Array Parameter..

“Maksudnya Apa Sih Mas?? Saya tidak mengerti…”

Begini ceritanya, kalau kita ingin menulis sebuah parameter di dalam method (parameter formal), biasanya kita akan mencantumkan tipe data lalu diikuti dengan nama variabelnya.. Nah, kalau kita ingin mencantumkan array? Pasti tanda yang tidak mungkin ketinggalan adalah kurung siku ([])..

Sejak Java SE 5.0, untuk menuliskan / mencantumkan paramter yang berupa array, kita tidak perlu lagi menulis dengan cara mengikutsertakan kurung siku tersebut..

Lebih detailnya silahkan lihat kode program di bawah ini.. Jangan kaget, mungkin ini style baru bagi anda, tapi saya sudah membiasakan dengan penulisan seperti ini.. :D Atau mungkin tulisan saya ini sudah lama anda ketahui? Ya maklum saja, saya sedang ingin menulis yang dasar-dasar menanggapi komentar “Bunga”..


public class Coba
{
    public static void main(String... args) //bisa dibuat seperti ini karena array
    {
        Coba c = new Coba();
        c.testNilai(10, 11, 2, 3, 54, 3);
        System.out.println("\n");
        for(int a : c.cobaAh())
            System.out.println("Dari coba AH " + a);
    }

    public void testNilai(int ... nilai) //parameter bisa menggunakan int... dan direpresentasikan sebagai array
    {
        int i = 1;
        for(int a : nilai)
            System.out.println("Nilai ke - " + (i++) + " : " + a);
    }

    public int[] cobaAh() //return type tidak bisa menggunakan int…
    {
        int[] a = {1,2,3,4,5};
        return a;
    }
}

Dan perlu diperhatikan bahwa penulisan seperti ini tidak berlaku pada return type yang berupa void atau tidak. Anda tidak bisa mereturn array dengan cara penulisan seperti di atas..

Dalam waktu dekat juga mungkin saya akan menulis tentang konsep boxing dan unboxing, serta autoboxing.., dan macam-macam hal dasar lainnya.. Kalau dirasa banyak permintaan ya saya akan menulis hal tersebut.. :D

3-May-2008 Posted by wilbertliu | Java | | No Comments

Jawaban Tes Akhir Semester Java (Teori)

Sekali lagi saya sebagai asisten merasa bertanggung jawab untuk memberikan jawaban ini.. Ya bagus kalau mau dipelajari ulang supaya nanti sewaktu tes yang praktikum bisa tambah mantap!

Tapi selebihnya terserah anda saja.. :D

Ok, tanpa berbasa basi, langsung saja unduh filenya dari sini….

———————)))> file jawaban !!

Tenang saja bagi anda yang belum bisa, kontak saya jika anda ingin belajar.. Tentu saja kalau saya ada waktu, kalau pas lagi sibuk maaf tidak bisa terlalu banyak melayani.. hehehe! :)

Semoga berhasil di tes praktikumnya.. Dan semoga anda dapat melihat nilai anda dari jawaban ini…

Salam asisten Java 2008, Wilbert! :D

2-May-2008 Posted by wilbertliu | Aktivitas | | No Comments

Jawaban Latihan Soal TAS Java

Nih, ak kasih jawabannya.., sory baru sekarang dikasi, kemarin-kemarin belum sempat membuat.. Maklum banyak urusan yang harus dikerjain terlebih dahulu.. :D Langsung aja yah.., filenya diunduh (didownload) dari sini……….—>> file jawaban <<—

Untuk pembahasan sory banget saya tidak bisa menyertakan karena banyak sekali yang harus dibahas per nomornya.. Saran saya, coba belajar sendiri, atau tanyakan lewat Yahoo Messenger.. Lewat media apapun sebenarnya juga boleh, asal waktunya ada dan saya pas sedang tidak ada kerjaan.. hehe!

Jika ingin menghubungi, bisa lihat di bagian kanan, di sana ada bagian “Contact”, anda bisa melihat alamat-alamat yang bisa digunakan untuk menghubungi saya secara online..

Selamat menempuh ujian akhir, semoga berhasil..!!

30-April-2008 Posted by wilbertliu | Aktivitas | | 6 Comments

Abstract Factory Pattern di Java

Setelah menghilang dari peredaran beberapa hari ini, sekarang saya post deh tentang design pattern yang satu ini.. Buat anda yang belum begitu paham atau sama sekali tidak tahu tentang design pattern, bisa langsung ke alamat ini http://en.wikipedia.org/wiki/Design_pattern

Nah, sekarang ini yang akan saya bahas adalah Abstract Factory di Java.. Saya tidak tahu apakah pattern ini juga digunakan di bahasa pemrograman lainnya.., tetapi jelas ini sangat penting di Java.. :D

Lalu apa keunggulannya dan kapan pattern ini digunakan? Saya mengambil langsung dari sumber yang terpercaya, yaitu sebuah buku tentang design pattern (lupa pengarangnya siapa) :P .. Berikut ulasannya :

  • Creates families of related or dependent objects like Kit.
  • Provides a class library of products, exposing interface not implementation.
  • Needs to isolate concrete classes from their super classes.
  • A system needs independent of how its products are created, composed, and represented.
  • Try to enforce a constraint.
  • An alternative to Facade to hide platform-specific classes
  • Easily extensible to a system or a family
Nah, itu tadi ulasan sedikit tentang design pattern ini, sekarang mari saya beri contoh code nya.. Tenang, tidak begitu susah dan anda dapat menjalankannya melalui command prompt atau terminal di Linux

package com.pattern;

public interface Local
{
    void loadData();
}

package com.pattern;

public interface Remote extends Local
{
    void connectRemote(String url);
}

package com.pattern;

public class LocalImplementation implements Local
{
    public void loadData()
    {
        System.out.println("Load data from local area");
    }
}

package com.pattern;

public class RemoteImplementation implements Remote
{
    public void connectRemote(String url)
    {
        System.out.println("Connect to a remote site");
    }

    public void loadData()
    {
        System.out.println("Load data from a remote area");
    }
}

package com.connection.factory;

import com.pattern.Local;
import com.pattern.Remote;

public interface ConnectionFactory
{
    Local getLocalConnection();
    Remote getRemoteConnection();
}

package com.connection.factory;

import com.pattern.Local;
import com.pattern.Remote;
import com.pattern.LocalImplementation;
import com.pattern.RemoteImplementation;

public class DataManager implements ConnectionFactory
{
    public Local getLocalConnection()
    {
        return new LocalImplementation();
    }

    public Remote getRemoteConnection()
    {
        return new RemoteImplementation();
    }

    public void load(String mode)
    {
        if(mode.equalsIgnoreCase("local"))
        {
            Local l = getLocalConnection();
            l.loadData();
        }
        else
        {
            Remote r = getRemoteConnection();
            r.connectRemote("http://wilbertjava.wordpress.com");
            r.loadData();
        }
    }
}

package com.main;

import com.connection.factory.DataManager;
import java.util.Scanner;
import java.util.Random;

public class Main
{
    public static void main(String[] args)
    {
        Scanner s = new Scanner(System.in);
        DataManager dm = new DataManager();

        System.out.println("Data Connection\n======================================");
        System.out.print("Enter a valid connection (local or remote) : ");

        dm.load(s.nextLine());

        Thread t = new Thread(new Routine());
        t.start();
    }

    private static final class Routine implements Runnable
    {
        public void run()
        {
            Random r = new Random();
            System.out.println("Please Wait… :::");
            for(int i = 0; i <= 100; i += r.nextInt(20))
            {
                try
                {
                    System.out.print("=====");
                    Thread.sleep(r.nextInt(500));
                }
                catch(InterruptedException e) {}
            }

            System.out.println(" : 100%!\nData Loaded");
        }
    }
}
Sepintas tadi adalah sourcecode yang sudah saya buat.. Mungkin anda ingin dalam bentuk projectnya? Ok, saya kasih archive nya dan bisa diunduh dari sini

30-April-2008 Posted by wilbertliu | Java | | 6 Comments

Object Collection Dengan ArrayList

Langsung saja yah, tidak tahu kenapa hari-hari ini jadi sering nulis blog, ya supaya reader semua ga kecewa deh kalau masuk blog saya… :) Kan biasa banyak keluhan tuh, “Koq blognya ga diupdate mas?”

Ok, hari ini saya akan nulis tentang Object Collection.. Apa sih Object Collection itu? Ini adalah struktur data yang lagi gencar dipakai karena kemudahannya dibandingkan dengan array.. Kalau kita belum terbiasa menggunakan Collection, pasti kita sendiri akan kesusahan untuk memahaminya.. Ya kuncinya jika anda ingin menguasai ini, banyaklah berlatih menggunakan Collection ini..

“Lalu apa bedanya dengan array? Katanya lebih mudah?”

Ya, perbedaannya antara lain, array adalah suatu mekanisme struktur data yang digunakan untuk menyimpan nilai (bisa primitive data type atau reference data type yang biasa kita sebut objek) yang sama typenya.. Sehingga jika anda membuat suatu array bertipe String, seluruh indeksnya hanya bisa berisi String, tidak bisa berisi tipe data lain…

Berbeda dengan Collection, mekanisme struktur data ini memungkinkan kita untuk mengisi satu atau lebih tipe data di dalamnya.. Misal di indeks pertama kita mengisi data bertipe integer, di indeks yang lainnya bisa juga data yang bertipe boolean dsb..

Berikut contoh code yang saya buat, semoga memberi kita pemahaman lebih tentang Collection..


public class HandPhone
{
    private String number;
    private String simCard;
    private String merk;
   
    public String getNumber()
    {
        return number;
    }
   
    public void setNumber(String number)
    {
        this.number = number;
    }
   
    public String getSimCard()
    {
        return simCard;
    }
   
    public void setSimCard(String simCard)
    {
        this.simCard = simCard;
    }
   
    public String getMerk()
    {
        return merk;
    }
   
    public void setMerk(String merk)
    {
        this.merk = merk;
    }
}

class N70 extends HandPhone
{
    private int jmlFitur;

    public int getJmlFitur()
    {
        return jmlFitur;
    }

    public void setJmlFitur(int jmlFitur)
    {
        this.jmlFitur = jmlFitur;
    }
   
}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Main
{
    public static void main(String[] args) throws IOException
    {
        List<N70> hp = new ArrayList<N70>();
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
       
        for(int i = 1; i <= 3; i++)
        {
            N70 za = new N70();
            System.out.print("Merk HP : ");
            za.setMerk(reader.readLine());
            System.out.print("No HP : ");
            za.setNumber(reader.readLine());
            System.out.print("Sim Card : ");
            za.setSimCard(reader.readLine());
            System.out.print("Jumlah Fitur : ");
            za.setJmlFitur(Integer.parseInt(reader.readLine()));
            hp.add(za);
        }
       
        for(N70 h : hp)
            System.out.println(h.getMerk() + " " + h.getNumber() + " " + h.getSimCard() + " " + h.getJmlFitur());
    }
}

Sekian dari saya untuk hari ini tentang Object Collection.. Mungkin ada yang mau request tutorial? Kalau tidak ada ya saya tidak nulis nih… hehehe!! Happy Programming with Java.. :)

23-April-2008 Posted by wilbertliu | Java | | 2 Comments