Thursday, December 25, 2008

Subclipse: Masalah di Java Build Path

Menyambung seri SVN Subclipse (plugin Eclipse) di beberapa hari posting saya, maka saya memberikan tips juga yang biasanya saya jumpai pada saat checkout di Subclipse yaitu masalah Build Path.

Masalah yang umum dialami adalah pada saat checkout, project yang dikenali bukan dianggap sebagai Project Java sehingga source code yang kita edit dianggap text biasa dan tidak akan ada auto compilation dan auto compile/build.

Error yang biasanya muncul misalkan pada saat kita berusaha menampilkan daftar object / method dengan menekan CTRL+Space adalah "This compilation unit is not on the build path of a Java project.".

Project seperti ini mudah dikenali di Eclipse, perhatikan bahwa project yang tidak dianggap sebagai project Java maka tidak akan ada entity "JRE System Library" jika dilihat pada daftar node Package Explorer-nya (gambar).


Jadi bagaimana kita membuat project pentaho-aggregate-designer pada gambar supaya kembali dianggap sebagai Java Project ?

Ini adalah langkah demi langkah untuk melakukan hal tersebut :
  • Tutup project (close project) pentaho-aggregate-designer (Klik kanan pada project dan pilih opsi "Close Project").


  • Buka file .properties yang ada pada project folder workspace Anda dengan text editor / notepad.
  • Ubah isi file .properties berikut


    <?xml version="1.0" encoding="UTF-8"?>
    <projectDescription>
    <name>pentaho-aggregate-designer1.0</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
    </buildSpec>
    <natures>
    </natures>
    </projectDescription>


  • menjadi....


    <?xml version="1.0" encoding="UTF-8"?>
    <projectDescription>
    <name>pentaho-aggregate-designer1.0</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
    <buildCommand>
    <name>org.eclipse.jdt.core.javabuilder</name>
    <arguments>
    </arguments>
    </buildCommand>
    </buildSpec>
    <natures>
    <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
    <nature>org.eclipse.jdt.core.javanature</nature>
    <nature>org.eclipse.jem.beaninfo.BeanInfoNature</nature>
    </natures>
    </projectDescription>

  • Buka kembali project Anda (klik kanan project Anda dan pilih opsi Open Project)


  • Sekarang project Anda akan dianggap sebagai project Java



  • Selesai

Subclipse : Buat Project Baru dari SVN

Seperti kita ketahui, Pentaho adalah proyek BI open source yang terbagi atas banyak project. Pentaho menggunakan SVN server untuk sebagai hosting dan source code managementnya.

Sebagai pemakai Eclipse IDE yang intensif dengan plugin Subclipse maka untuk mengatur pekerjaan development Pentaho, saya tidak begitu banyak mengalami kesulitan.

Dan pada artikel kali ini saya ingin membagi tips bagaimana membuat proyek baru dari suatu lokasi SVN. Contoh yang digunakan adalah dari Pentaho, dengan lokasi svn-nya ada di svn://source.pentaho.org/svnroot/.

Tambahkan lokasi tersebut di Subclipse melalui perspective SVN Repository Exploring, dan hasil repository yang ditambahkan akan tampak seperti pada gambar di bawah ini.

Dari beberapa project folder yang di atas, kita coba mengambil project pentaho-reportdesigner. Sebelumnya kita terlebih dahulu kembali ke perspective Java dan buat project wizard baru.

Berikut adalah langkah-langkahnya :
  • Pilih menu File | New | Project
  • Pada dialog "Select a wizard" pilih opsi "Checkout Projects from SVN"


  • Pilih lokasi SVN Pentaho yang sudah didefinisikan sebelumnya di atas


  • Pilih folder trunk dari project pentaho-reportdesigner. Klik tombol "Next >"



  • Pada dialog "Check out as" biarkan default entry yang ada dan klik tombol "Next >"



  • Pada dialog terakhir yang muncul. Klik tombol "Finish"



  • Beberapa saat kemudian akan muncul dialog progress dari proses checkout SVN kita. Tunggu sampai selesai.



  • Setelah checkout source selesai maka project tersebut akan di-build terlebih dahulu apabila Anda memang memiliki setting "Build Automatically" di Eclipse.
  • Anda dapat melihat sekarang project "pentaho-reportdesigner" tersebut sudah terdaftar di workspace Anda lengkap dengan semua file dan foldernya.


  • Selesai
Semoga tips ini dapat membantu kita mengembangkan proyek kita terutama proyek open source....

Catatan Tambahan :

Versi Eclipse yang digunakan : 3.3.1.1
Versi Subclipse yang digunakan : 1.4.7


Subclipse: Unable to specify SVN Interface Client

Pernahkah Anda mendapat error / warning seperti ini pada saat ingin check out dari url dengan protokol svn (svn://.....) ? Error ini sepertinya tidak masuk akal terutama jika kita sudah melakukan instalasi svn client di sistem OS kita.

Lalu apa yang harus dilakukan ?

Cobalah tambahkan beberapa plugins tambahan dari repository Subclipse di Internet. Caranya adalah :
  • Ke menu Help | Software Updates | Find and Install 
  • Pilih Search for new features to install, klik tombol Next
  • Tick opsi Subclipse dan  klik tombol Finish
  • Pilih Subversion Client Adapter, Subversion Native Library Adapter (JavaHL), plugin-plugin SVNKit dan klik tombol Finish
  • Instalasi akan dimulai dengan melakukan download plugin yang telah kita pilih di atas
  • Restart Eclipse
  • Selesai
Sekarang Anda sudah dapat menambahkan lokasi svn dengan lancar. Semoga tips ini membantu...

Sunday, December 21, 2008

ANT build.xml & Eclipse : Copy File Classes

Pada saat fase development untuk aplikasi web Tomcat, sering sekali kita harus mengcopy class-class saya ke folder WEB-INF/classes secara manual.

Dengan menggunakan IDE Eclipse yang sudah terintegrasi dengan Apache Ant di dalamnya maka hal tersebut dapat kita otomatisasi-kan. 

Berikut adalah contoh file build.xml yang saya gunakan untuk meng-copy file-file yang sudah di-compile oleh Eclipse ke folder web aplikasi Tomcat saya.



<?xml version="1.0" encoding="UTF-8"?>
<project name="copy_classes" default="copytotomcat" basedir=".">

<property name="feris.tomcat.dvworks.folder"
value="C:\apache-tomcat-6.0.16\webapps\dvworks\WEB-INF\classes" />

<target name="copytotomcat">
<copy
todir="${feris.tomcat.dvworks.folder}"
verbose="true" overwrite="true">
<fileset dir="./bin">
<patternset id="non.feris.classes">
<include name="**/*.class" />
<exclude name="**/*Feris*" />
</patternset>
</fileset>
</copy>
</target>
</project>


Semoga membantu di kerjaan sehari-hari kita.... 

Apache Tomcat : Konfigurasi Auto Reload Class

Pendahuluan

Untuk programmer Java, pada saat fase development kita biasanya kita sering mengubah class dan library dan melakukan testing aplikasi web tersebut di Apache Tomcat.

Untuk membuat efektif perubahan library dan class tersebut bisa dilakukan dengan beberapa cara antara lain :
  • Melakukan restart server
  • Mengubah file web.xml
  • Melakukan konfigurasi di file context.xml
Membuat dan Konfigurasi context.xml

Untuk tips kali ini maka pilihan ketiga yang akan kita lakukan.

  • Buat folder META-INF di dalam folder aplikasi kita jika belum ada.
  • Buat file context.xml  dan tambahkan dengan isi di bawah ini 


    <?xml version="1.0" encoding="UTF-8"?>

    <Context reloadable="true" />


  • Jika file context.xml sebelumnya sudah ada, tambahkan atribut reloadable = "true"
  • Jalankankan Tomcat Anda
  • Setiap perubahan dari class dan library kita, otomatis akan di-reload oleh Tomcat
  • Selesai

Install Apache Ant di Windows XP

Apache Ant adalah utilitas yang biasanya untuk membangun aplikasi Java. Disusun dalam format XML dan berisi untaian perintah layaknya shell script menempatkan ANT sebagai utilitas favorit untuk melakukan proses kompilasi dan build class-class Java dan jar dalam paket yang mudah didistribusikan.

Untuk Anda yang ingin install Apache Ant di Windows, saya sudah membuat artikel wikinya yang dapat dibaca di http://pentaho.phi-integration.com/apache-ant/instalasi-ant-di-windows-xp.

Tuesday, December 16, 2008

Eclipse: Menambahkan Semua File *.jar (Cara 1)

Pendahuluan

Sering sekali dalam development kita perlu menambahkan seluruh file jar yang diperlukan ke dalam classpath kita. Bagaimana kita melakukannya di Eclipse 3.x ? Ikuti langkah-langkah di bawah ini.

Menambahkan Semua File Library *.jar
  • Klik node project kita di lingkungan Eclipse
  • Pilih menu "Project" | "Properties"

  • Pada dialog Project Properties pilih tab "Libraries"
  • Klik tombol "Add Variable ..."
  • Pada dialog New Variable Classpath Entry klik tombol "Configure Variables..."




  • Pada dialog Preferences (Filtered) klik tombol "New..."
  • Pada dialog New Variable Entry masukkan nama variable yang Anda inginkan di field "Name:" dan pada bagian "Path:" klik tombol "Folder..."
  • Klik tombol "OK"
  • Perhatikan bahwa variable Anda sudah ada di dialog Preferences (Filtered)
  • Klik tombol "OK"
  • Pada dialog New Variable Classpath Entry ada peringatan "Variable points to a folder: Use 'Extend...' to select an archive inside the folder".  Klik tombol "Extend..." dan dari dialog Variable Extension yang muncul pilih semua file jar yang muncul (Tekan CTRL+A).




  • Klik tombol "OK"
  • Perhatikan bahwa semua jar sudah masuk ke dalam Libraries path kita.




  • Klik tombol "OK"
  • Selesai

Thursday, June 12, 2008

Eclipse: Menambahkan JUnit library

JUnit

Unit testing adalah hal yang sangat penting dan krusial bagi para pengembang aplikasi terutama aplikasi besar. Antara lain kegunaannya adalah menjaga agar aplikasi kita tetap on track sesuai requirement dan menghindari bug sedini mungkin.

JUnit adalah pustaka unit testing untuk Java yang sangat populer, dan sebagai pengguna Eclipse ternyata JUnit ini sudah ada secara built in tetapi tidak disertakan secara otomatis di dalam classpath project kita.

Berikut adalah petunjuk menambahkan library / pustaka JUnit di dalam lingkungan Eclipse.

Menambahkan JUnit ke dalam Project

  • Klik kanan nama project kita kemudian pilih properties (atau ALT+ENTER)
  • Pilih Java Build Path | Libraries
  • Klik tombol Add Library



  • Pilih JUnit | klik Next
  • Pilh JUnit versi 3 atau 4 | Klik Finish



  • JUnit sudah ditambahkan ke dalam classpath


* Ditulis dengan menggunakan Windows Live Writer.

Sunday, June 8, 2008

Regular Expression di Java

Regular expression (regex) adalah konstruksi yang sangat powerful dalam mengolah teks. Berangkat dari popularitas penggunaannya di PERL, regex ini sekarang umum dijumpai di hampir semua bahasa pemrograman yang populer termasuk Java.

Jadi, bagaimana kita menggunakannya di Java ?

Mudah, ikuti saja tips berikut ini ;)

Mencocokkan suatu pola teks di dalam objek bertipe String

Untuk mencocokkan suatu pola teks, kita gunakan metode matches() dari String object. Sintaksnya adalah sebagai berikut:

boolean java.lang.String.matches(String regex)

Parameter yang digunakan adalah suatu pola atau pattern - yang merupakan suatu objek String - dan method ini mengembalikan nilai boolean true jika pola yang dibandingkan cocok. Begitu juga sebaliknya, akan mengembalikan nilai false jika pola yang dibandingkan dengan teks tidak cocok.

Contoh 1:

if(textToBeMatched.matches("[a-z A-Z]+"))
System.out.println("Teks cocok dengan sederetan karakter alfabet");


Contoh 2:


public class RegexTest {

public static void testPhoneNumber(String phoneNumber)
{
String phoneNumberPattern = "^\\+{0,1}[\\d]+[-\\d]+\\d$";

if(phoneNumber.matches(phoneNumberPattern))
System.out.println(phoneNumber + " adalah pola nomor telepon !");
else
System.out.println(phoneNumber + " bukan merupakan pola nomor telepon yang valid !");
}
public static void main(String[] args)
{
testPhoneNumber("+6221-3011-9353"); //output adalah nomor telepon yang benar
testPhoneNumber("-6221-3011-9353"); //output adalah nomor telepon yang salah
}
}


Mengganti teks yang cocok dengan suatu pola

Untuk mengganti suatu teks yang cocok dengan suatu pola kita dapat menggunakan dua class dari package java.util, yaitu class Pattern dan Matcher.

Pertama, kita menginisialisasi pola dengan method compile() dari class Pattern. Method ini sekaligus akan mengembalikan satu objek Pattern. Kita kemudian dapat memberikan teks yang akan diolah ke method matcher() yang kembali akan membuat objek Matcher. Sekarang kita tinggal memanipulasi teks dalam objek tersebut. Caranya adalah dengan menggunakan method replaceAll() method dari objek Matcher.



Contoh:


import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexReplacementTest {

public static String censoredPhoneNumber(String phoneNumber)
{
String phonePattern = "(\\+{0,1}[\\d]+[-\\d]+\\d).*";

Pattern pattern = Pattern.compile(phonePattern);
Matcher matcher = pattern.matcher(phoneNumber);

return matcher.replaceAll("*sensor*");
}

public static void main(String[] args)
{
String phoneNo = "Nomor telepon saya adalah +6221-3011-9353";

System.out.println(censoredPhoneNumber(phoneNo));

}
}

Kesimpulan

Aritkel blog ini menunjukkan 2 penggunaan regular expression :
  1. mencocokkan pola teks dengan method matches() yang ada pada setiap objek String.
  2. mengganti suatu text yang cocok dengan suatu pola dengan bantuan dua class helper, Pattern and Matcher.

Mudah-mudahan ini dapat membantu Anda untuk memecahkan masalah penggunaan regular expression di Java.

Salam,

Perubahan Header Blog

Dengan pertimbangan efisiensi ruang, akhirnya saya memutuskan untuk mengganti header blog ini dengan versi yang lebih ringkas - dengan tinggi gambar yang lebih kecil.

Di bawah ini adalah gambar header lama dan header baru.

(header lama)

(header baru)

Walaupun hanya header, semoga bisa menambah kesan keseriusan saya untuk selalu memberikan sumbangan tips dan tutorial untuk Java - a great programming language - melalui blog ini !

Salam,

Tuesday, May 27, 2008

Perhitungan Durasi Eksekusi

Sering sekali kita ingin mengukur performansi dari aplikasi Java kita berdasarkan durasi eksekusi aplikasi tersebut.

Untuk itu saya menulis tips ini dalam bentuk satu source code, dimana kita menghitung durasi waktu dalam mili detik dan kemudian dikonversi ke satuan detik.

Dalam contoh ini, operasi yang dilakukan adalah pembacaan isi folder temp.


package org.phiintegration.com;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;

/**
* Ini adalah contoh perhitungan durasi waktu yang diperlukan
* untuk menjalankan keseluruhan aplikasi di thread Main.
*
* Dalam contoh ini kita melakukan perhitungan durasi waktu
* yang diperlukan untuk membaca daftar folder di temporary folder.
*
* @author Feris Thia
*
*/

public class DurasiBrowsingFolder {
public static void main(String[] args) throws IOException, Exception {

//Mencatat waktu awal proses
long waktuMulai= System.currentTimeMillis();

//Proses membaca daftar file di lokasi folder temp Java
String curDir = System.getProperty("java.io.tmpdir");
File dir = new File(curDir);

String[] entriFolder = dir.list();
if (entriFolder != null) {
for (int i=0; i<entriFolder.length; i++) {
String namaFile = entriFolder[i];
System.out.println(namaFile);
}
}


//Akhir proses

//Mencatat waktu akhir proses
long waktuSelesai = System.currentTimeMillis();

//Menghitung durasi dalam detik dan
//mencetak dengan format ##0.000000
double newRunTime = (double)(waktuSelesai - waktuMulai) / 1000;
DecimalFormat runtimeDF = new DecimalFormat("##0.000000");

System.out.println("Durasi eksekusi : " +
runtimeDF.format(newRunTime) +
" detik");
}
}

Tipe Data Primitif

Pengenalan

Tipe data primitif adalah tipe data dasar yang dikenali oleh Java dan bukan merupakan class.

Walaupun kelihatan sepele, tetapi dengan memahami cara penggunaan dan mengetahui nilai-nilai yang dapat ditampung oleh variabel data ini dapat mempermudah pekerjaan kita.

Terutama sekali bagi seorang programmer Java yang sehari-harinya berhadapan dengan berbagai macam data dan manipulasinya. Data ini bisa berasal dari database server, text, web, dsbnya...

Tipe data primitif ini dapat dikenali dengan ciri sebagai berikut :

  • memiliki keyword huruf kecil semuanya

  • memiliki wrapper class, yaitu class yang membantu untuk mewakili dan mengolah lebih lanjut nilai dari tipe data bersangkutan. Misalkan int dengan, class Integer.

  • karena bukan suatu class, untuk inisialisasi variabel tidak menggunakan keyword new


Rentang Nilai

Berikut adalah daftar tipe data primitif, rentang nilainya dan panjang bit-nya.

No

Tipe Data

Range Nilai dan Panjang Bit

1

byte

-128 s/d 127 (8 bit)

2

short

-32,768 s/d 32,767 (16 bit)

3

int

-2,147,483,648 s/d 2,147,483,647 (32 bit)

4

long

-9,223,372,036,854,775,808 s/d 9,223,372,036,854,775,807 (64 bit)

5

float

Nilai pecahan (32 bit)

6

double

Nilai pecahan (64 bit)

7

boolean

true / false (1 bit)

8

char

'\u0000' (0) s/d '\uffff' (65,535) (16 bit)

Keterangan :


Nilai Default


No

Tipe Data

Nilai Default

1

byte

0

2

short

0

3

int

0

4

long

0L

5

float

0.0f

6

double

0.0d

7

boolean

false

8

char

'\u0000' (0)

Keterangan:

  • Semua angka bilangan bulat secara default adalah bertipe int. Oleh sebab itu perlu digunakan suffix L untuk menyatakan bilangan bulat yang bertipe long , apalagi jika nilai bilangan bulat yang digunakan sudah melewati jangkauan nilai int.

  • Sebaliknya untuk bilangan pecahan, secara default tipenya adalah double. Sehingga untuk semua nilai pecahan yang akan dimasukkan sebagai nilai untuk tipe data float ini, maka perlu diberikan suffix f.

Contoh Penggunaan Yang Benar


int nilai1 = 20;

long nilai2 = 1000;

long nilai3 = 23000L;

float nilai4 = 90;

float nilai5 = 1.24f;

double nilai6 = 100;

double nilai7 = 2010.9311;

double nilai8 = 2.0109311e3; //sama dengan nilai7 (2.0109311 dikalikan 10 pangkat 3)

double nilai9 = 11.2d;

long nilai_maks_long = 9223372036854775807L;

char nilai10 = 0;

char nilai11 = 'b';

char nilai12 = '\u0003';

boolean kondisi = true;


Contoh Penggunaan Yang Salah


long nilai_maks_long = 9223372036854775807; //harus menggunakan suffix L karena sudah di luar range int

float nilai13 = 0.03; //harus menggunakan suffix f

char nilai14 = '\u01'; //harus menggunakan format '\u9999' (\u diikuti 4 digit hexadecimal)



Referensi
  1. Sun's Java Tutorial, Primitive Data Types section.


Tuesday, May 20, 2008

Video : GData Java Client API Demo

Here is the video showing a demo on using CellDemo class from Google Data (GData) Java client API bundled.


With this video I intended to express 3 things :
  1. How we execute the sample in Eclipse environment
  2. The running class will create a HTTPS channel
  3. Execution result is immediately visible to us
You can watch the video here.

Saturday, May 17, 2008

Eclipse com.sun.mirror.apt.* Problem

When I'm working with Google GData Java client API in Eclipse environment, I found a numerous problems and errors. The problems were found in package com.google.gdata.data.apt which uses a number of classes from com.sun.mirror.apt package, actually a standard package of recent JDK bundled. And Eclipse recognize the package and all the classes as undefined ones.

Well, I have already followed the GData "Get Started" instructions and added all libraries needed. After googling for almost an hour - which is kinda waste of time.- finally I found out an answer. And it had to do with my understanding of Eclipse inclusion of JRE and JDK library.. surprising enough given that it is too basic !

I always assume that "Java library" in Eclipse workspace is a JDK one if we have it installed. But I was wrong, since Eclipse only include JRE library - not the JDK part.

So, what I'm going to do is to add tools.jar - a jar that has com.sun.mirror.apt.* classes - from JDK distribution into my Eclipse project.

To add it as external jar, here are the steps :
  • Navigate to Project=>Properties menu
  • Click on Java Build Path in left side navigation
  • Click at Libraries tag
  • Click on Add External JARs
  • Navigate into your JDK library folder, for example C:\Program Files\Java\jdk1.5.0_15\lib
  • Choose tools.jar and click Open button
  • Click OK
  • Done
Figure 1 : JRE jars and the added JDK's tools.jar


So for those who also develop Java application using GData Java API with Eclipse, I write this article in a hope that it can be a time savior for you facing the same problem.

Thank You for Visiting,

Wednesday, May 14, 2008

Mondrian Java OLAP Server + MySQL

Pentaho Mondrian adalah salah satu OLAP server open source yang dikembangkan dengan bahasa Java dan sangat populer. Tetapi terkadang untuk melakukan instalasi dan konfigurasi kita biasanya menemukan sejumlah isu. Artikel yang saya buat ini mudah-mudahan bisa membantu usaha untuk melakukan setup Mondrian sehingga bisa menjadi entry point untuk masuk ke dunia OLAP open source.

Untuk mengetahui lebih lanjut mengenai Mondrian Anda dapat mengunjungi situs kami di :
- http://pentaho.phi-integration.com/mondrian (Bahasa Indonesia)
- http://pentaho-en.phi-integration.com/mondrian (Bahasa Inggris)

Sunday, May 11, 2008

Static Factory Method dan Contoh Penggunaannya

Kita sebagai programmer Java sering sekali langsung menggunakan operator new untuk melakukan konstruksi dan inisialisasi class kita menjadi object. Kita bisa menggunakan cara lain, yaitu dengan factory method.

Apa sebenarnya fungsi operator new ?

Dengan bahasa yang sangat teknis maka fungsi operator new adalah melakukan konstruksi dan inisialisasi class kita dengan melakukan alokasi memori untuk objek baru dan mengembalikan referensi memori dari objek tersebut. Operator ini juga akan menjalankan metode constructor.

Constructor sendiri adalah method yang namanya sama dengan nama class yang kita definisikan. Contoh penggunaan constructor dan operator new adalah seperti pada listing kedua class Java di bawah ini.

RowData.java

import java.text.SimpleDateFormat;
import java.util.Date;


public class RowData {
private int numberOfFields;
private Date currentDate;

public RowData() {
this.numberOfFields = 0;

currentDate = new Date();
}

public void printCurrentDate()
{
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
System.out.println(df.format(currentDate));
}

}


InstantiateRowData .java

public class InstantiateRowData {

public static void main(String[] args)
{
/*
**********************************
* Konstruksi objek
* dengan memanggil operator new
* secara langsung dari luar class
**********************************
*/
RowData c = new RowData();

c.printCurrentDate();
}
}


Factory Method

Factory method adalah method yang memiliki fungsi khusus untuk melakukan konstruksi class menjadi objek dan mengembalikan referensi objek tersebut.

Method ini harus bersifat static dan ditempelkan ke dalam class tersebut. Dan untuk menjamin bahwa kita tidak akan bisa melakukan konstruksi langsung maka secara eksplisit method constructor harus diubah diberi akses private.

Lihatlah kedua class setelah diubah konstruksinya.

RowData.java

import java.text.SimpleDateFormat;
import java.util.Date;


public class RowData {
private int numberOfFields;
private Date currentDate;

private RowData() {
this.numberOfFields = 0;

currentDate = new Date();
}

public static RowData getRowData()
{
return new RowData();
}

public void printCurrentDate()
{
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
System.out.println(df.format(currentDate));
}

}

Perhatikan di baris 9 bahwa constructor kita telah diberi akses private dari yang sebelumnya bersifat public sehingga operator new tidak mungkin dapat mencapainya lagi dari luar class RowData. Kita menggantikannya dengan suatu method static getRowData() yang bersifat public. Di dalam method ini kita kembali melakukan konstruksi objek dengan operator new.

InstantiateRowData.java

public class InstantiateRowData {

public static void main(String[] args)
{
/*
**********************************
* Konstruksi objek
* dengan memanggil
* factory method
**********************************
*/
RowData c = RowData.getRowData();

c.printCurrentDate();
}
}
Kegunaan Factory Method

Walaupun kelihatan sangat sederhana, tetapi apabila kita sudah makin mahir dalam melakukan coding di Java dan menangani proyek yang makin lama skalanya semakin besar maka akan ada kebutuhan untuk membuat aplikasi yang bersifat concurrent atau yang bersifat parallel multi threading. Kondisi ini membuat kita membutuhkan teknik coding yang makin kompleks dan sophisticated. Salah satunya adalah menghindarkan konstruksi objek setengah jadi (half-constructed object) yang dapat terekspos melalui method constructor. Dan ini bisa dipecahkan dengan sangat baik melalui teknik factory method ini.

Selain itu factory method ini juga sudah menjadi bagian dari design pattern yang merupakan kumpulan pola coding yang bisa digunakan kembali sesuai kasus atau reusable.

Download File-file Contoh

Ok, buat Anda yang malas mengetik lagi atau tidak ada editor memadai dan ingin kompilasi langsung dan lihat efeknya silahkan download file-file contohnya di sini.

Blog Business Intelligence PHI-Integration

Hi para sahabat Java,

Hari ini saya memperkenalkan company blog yang khusus membahas penggunaan produk data management dan business intelligence baik open source maupun proprietary. Seperti yang Anda ketahui bahwa produk solusi dari PHI-Integration adalah Pentaho - perusahaan open source BI terdepan saat ini - dimana kami merupakan partner resmi mereka sejak 2006 sehingga blog ini akan membahas cukup banyak tentang produk Pentaho mulai dari Kettle - Pentaho Data Integration, Mondrian OLAP Server, Weka data mining, dan Pentaho Dashboard.


Gambar Tampilan OLAP dari JPivot + MS Analysis Server

Blog yang saya sediakan untuk BI ini dapat Anda akses di http://business-intelligence.blogspot.com. Dari tulisan ini diturunkan sudah terdapat 2 artikel yaitu setting dan testing Mondrian sebagai OLAP XML Provider dan penggunaan JPivot untuk mengkonsumsi data OLAP Microsoft Analysis Server.

Demikian pengumuman ini saya buat. Semoga blog tersebut dapat memberi pengenalan, edukasi dan menjadi wadah berbagi pengetahuan dan pengalaman sebagai praktisi dan profesional di bidang data management dan business intelligence (BI).

Salam,

Monday, April 28, 2008

FAQ : Framework Java

Sering sekali seorang pemula atau newbie di Java menanyakan tentang framework terutama di milis JUG. Mulai dari definisi, kenapa diperlukan framework, apa saja produknya, dan sebagainya.

Hal ini tentunya sangat normal. Tetapi sayangnya, menurut saya pribadi karena kata "framework" ini sudah sedemikian sering digunakan dan dikaitkan ke berbagai konteks bisa telah kehilangan kesederhanaan definisnya dan menjadi ambigu serta klise.

Berikut saya coba mencoba memberikan definisi dilihat dari ciri framework. Definisi ini akan saya update terus untuk menjaga ketepatan dan kesederhanaan pengertiannya.

Layering

Secara sederhana, sebenarnya framework Java itu adalah lapisan yang berdiri di atas low level API (Application Programming Interface) lainnya yang umumnya adalah JSP dan Servlet.

Untuk menjelaskan, saya mengambil contoh level dari bahasa pemrograman yang umum dan terkenal (Assembly, C/C++ dan Visual Basic).

Assembly adalah bahasa programming yang dapat mengakses secara langsung ke registry-registry mikroprosesor. Tetapi untuk melakukan suatu hal yang sangat sederhana seperti membersihkan layar, instruksi codingnya akan sangat panjang.

Kemudian dikembangkan C/C++ yang mengandung perintah yang lebih 'manusiawi' atau di level yang lebih tinggi dari Assembly. Panjang codingnya biasanya jauh lebih kecil dari assembly.

Dan sampai akhirnya dikembangkan lagi bahasa atau fasilitas programming seperti Visual Basic, Delphi, dan sebagainya yang lebih 'manusiawi' lagi.


Dengan tingkat level yang makin tinggi, maka produktivitas akan meningkat tapi pada beberapa sisi fleksibilitas dan tingkat performansi akan dikorbankan.

Hal tersebut berlaku sama untuk framework Java. Lihat diagram berikut ini.


Bisa dilihat bahwa untuk web programming di Java, servlet ada di posisi paling bawah dan JSP (Java Server Pages) merupakan wrapper-nya atau di tingkat yang lebih tinggi. Di atasnya kemudian ada JSF (Java Server Faces), Spring, Struts, Webwork, dan sebagainya.

Semakin tinggi levelnya, maka produktivitas harusnya semakin tinggi tetapi fleksibilitas akan semakin rendah sehingga kadang diperlukan usaha lebih untuk mempelajari frawework ini (learning curve tinggi).


Sumber Lain

Untuk mencoba membantu menguatkan pengetahuan tentang framework ini maka saya coba kompilasi jawaban dan tulisan dari berbagai situs web baik yang berbahasa Indonesia maupun Inggris dari hasil googling. Kalau sempat ada yang mungkin bisa saya coba terjemahkan ke dalam bahasa Indonesia jika artikelnya di dalam bahasa Inggris.

Jadi jawaban untuk apa itu framework mungkin ada di situs-situs berikut ini :
  1. http://www.codeproject.com/KB/architecture/WhatIsAFramework.aspx
    • Artikel yang bagus karena tidak mendefinisikan framework dengan kering tapi lebih kepada aspek-aspek yang melingkupi definisi dari framework. Apakah itu sebagai suatu wrapper, arsitektur, dan suatu metodologi. Dan bagusnya lagi penjelasannya disertai dengan gambar-gambar konsep yang jelas.
    • Artikel ini tidak menjelaskan spesifik framework di Java tapi lebih ke framework secara umum dan saya pikir sudah bagus dan mewakili banget.
    • Sayangnya artikel ini masih dalam bahasa Inggris. Ada yang tertarik menerjemahkannya ?
  2. http://kaqfa.blogspot.com/2008/03/programmer-produktif-dengan-framework.html
    • Ini adalah blog Pak Fahri, "Harian Firdaus" yang kebetulan saya dapatkan dari hasil melakukan googling.
    • Walaupun masih agak kabur tentang definisi framework tapi saya suka dengan konteks penjelasan serta perumpaannya sehingga kita bisa paham di sisi mana framework dapat membantu kita.


Eclipse: Hello World

Membuat Project


Project adalah tempat dimana Anda menempatkan dan mengorganisasikan semua file Java dan file lain yang berkaitan.
 
Mulailah  membuat project Java dengan memilih dari menu toolbar File -> New -> Java Project.

Pada saat muncul dialog New Java Project, namakan project tersebut dengan "Pintar Java" dan klik tombol Finish.
 
Anda sudah membuat project pertama Anda dan siap memasukkan class-class Java ataupun resource lain di dalam project ini.



Hello World Class

Perhatikan pada jendela Package Explorer sudah terdapat project "Pintar Java".

 

 

Folder src adalah tempat kita meletakkan source code Java kita. Sedangkan JRE System Library [jre1.5.0_15] adalah keterangan bahwa project ini menggunakan pustaka Java versi 5.

  • Dari menu toolbar pilih File > New > Class.
  • Pada dialog New Java Class yang muncul, masukkan HelloWorld pada kotak teks Name | klik Finish.
  • Ketik source code untuk HelloWorld ini seperti pada artikel blog sebelumnya.
  • Jika semua benar maka jendela editor Eclipse akan tampak seperti pada gambar di bawah.

 

(Klik Pada Gambar untuk Memperbesar)

Perhatikan bahwa semua code highlight dan pengaturan indentasinya sangat rapi.

Pada bagian tab editor terdapat info nama file class kita yaitu HelloWorld.java. Editor ini juga telah dilengkapi intellisense sehingga jika terdapat kesalahan eja dapat diperbaiki dengan cepat dan juga fasilitas auto complete yang bisa diaktifkan dengan menekan CTRL+SPASI.

Menjalankan Aplikasi

 
Karena class HelloWorld ini memiliki method entry point, yakni method main maka class ini bisa dijalankan langsung.
  • Cari icon (run) dan klik pada tanda panah kecil di samping kanan
  • Klik pilihan Run As > 1 Java Application Alt+Shift+X, J

(Pilihan Run As -> Java Application)
  • Hasil eksekusi dapat dilihat di panel Console

(Hasil eksekusi dapat dilihat di jendela Console)

Penutup

 
Workbench Eclipse sudah menyediakan menu, toolbar, editor dan jendela yang intuitif sehingga kita dapat dengan mudah menyelesaikan satu project dan mengeksekusi satu program Java kecil.

Langkah-langkah untuk melakukan hal itu adalah :
  1. Membuat project dari menu File -> New -> Java Project.
  2. Membuat class dan mengetik source code pada editor yang sudah memiliki fasilitas auto complete dan intellisense.
  3. Melakukan eksekusi class dari menu run.
  4. Melihat hasil dari eksekusi pada jendela console jika terdapat output.

Sunday, April 27, 2008

Eclipse : Instalasi dan Pengenalan (Windows)

Pengenalan

 
Walau memungkinkan tapi saya sangat yakin Anda tidak ingin coding Java dengan hanya bermodalkan editor sederhana seperti Notepad bukan ?

Apalagi kalau kita memang profesinya adalah programmer Java profesional dan dituntut untuk berproduktivitas tinggi.
Coding dengan text editor seperti notepad ini tentunya tidak salah, malah bisa membuat kita lebih menguasai cara kerja Java secara lebih baik. Tapi lama kelamaan bisa menyebabkan kita malas karena bosan, apalagi kalau program yang akan kita bangun sudah menjadi sangat kompleks. Sesuatu yang asyik seperti coding ini malah akhirnya menjadi momok bagi kita :)
 
Tuntutan untuk berproduktivitas tinggi sudah tidak terhindarkan di jaman super cepat ini, artinya kita dituntut untuk lebih cepat menghasilkan code, mendeteksi masalah, melakukan uji coba/testing, memaketkan program kita dan berbagai hal penting lainnya.

Hal-hal ini sangat sulit dicapai jika tidak didukung sebuah tool yang baik, yaitu sebuah IDE (Integrated Development Enviroment) yang bagus. IDE yang saya maksud adalah editor yang khusus dirancang untuk coding dan mencakup fungsi yang dapat mencakup semua hal yang telah saya sebutkan sebelumnya di atas.
 
Dan di dalam barisan produk IDE ini ada salah satu yang sangat pantas disebut dan memiliki pasar / komunitas yang sangat besar: Eclipse.
 

Apa itu Eclipse ?

 
Eclipse adalah IDE yang ditulis sepenuhnya menggunakan Java dan berbasiskan produk IBM yang bernama VisualAge. Code basenya kemudian diadopsi ke versi open source dan akhirnya berubah namanya menjadi Eclipse di bawah naungan yayasan Eclipse (Eclipse foundation).

Versi-versi Eclipse

Sejak tahun 2006 Eclipse Foundation secara rutin merilis versi-versi Eclipse setiap tahun. Setiap rilis kemudian diberi kode sesuai dengan nama-nama bulan dari planet Jupiter. Diantaranya adalah sebagai berikut :
  • Callisto (30 Juni 2006)
  • Europa (29 Juni 2007)
  • Ganymede (25 Juni 2008)

Distribusi Eclipse

Di samping itu Eclipse juga didistribusikan dalam beberapa project sesuai kebutuhan spesifik :
  • Sebagai Java IDE (fungsi utama)
  • C++ IDE
  • Java mobile / embedded device IDE
  • Web development
  • dsbnya

Instalasi Eclipse


Untuk instalasi Eclipse, sebelumnya sistem kita sudah harus terinstalasi runtime Java. Setelah itu kita dapat mengambil paket instalasi Eclipse di website http://www.eclipse.org. Klik link download.


 

Akan terlihat beberapa pilihan paket untuk Eclipse ini. Paket/distro tersebut dibagi berdasarkan kelengkapan fungsionalitasnya :

  • Eclipse IDE for Java Developers untuk pemrograman Java dengan fitur standar.
  • Eclipse IDE for Java EE Developers, diperuntukkan khusus untuk pembuatan aplikasi web dan hal-hal yang berhubungan dengan Java Enterprise Edition lainnya.
  • Eclipse IDE for C/C++ Developers, seperti namanya diperuntukkan untuk programmer C/C++
  • Eclipse IDE for RCP/Plugin-Developers, diperuntukkan untuk Anda yang ingin mengembangkan ekstensi atau plugin Eclipse. Sebelumnya paket ini dibungkus dengan nama Eclipse SDK.
  • Eclipse Classic, paket ini adalah "bungkus" lama dari Eclipse yang menyertakan pustaka untuk mengembangkan plugin.


Untuk pilihan ini kita mengambil Eclipse IDE for Java Developers sebagai langkah awal kita. Download paket dalam bentuk file zip dari server mirror yang paling dekat dengan kita.

Setelah selesai download file zip tersebut tinggal kita ekstrak misalkan ke c:\eclipse dan kita telah selesai melakukan 'instalasi' Eclipse.

 

Menjalankan Eclipse

Setelah instalasi Eclipse dapat dijalankan dengan cara :

  • Masuk ke folder c:\eclipse dan Anda akan menemukan file eclipse.exe, jalankan file tersebut.
  • Buat Anda yang lebih hardcore tentunya Anda juga dapat menjalankan Eclipse dari command line. Sebagai contoh saya menggunakan perintah "eclipse -vmargs -XstartOnFirstThread". Disini Anda dapat memodifikasi argumen tersebut, argumen ini juga dapat dimasukkan ke dalam file eclipse.ini jika Anda ingin menjalankan Eclipse dengan cara pada point no 1 di atas.


Workspace

Setelah dijalankan, pada awal dialog Eclipse akan menanyakan dimana konfigurasi Eclipse dan lokasi project Java akan disimpan (gambar).

 

 

Lokasi yang dimasukkan ini adalah lokasi workspace.

Secara default, pada Windows lokasi ini terdapat di C:\Documents and Settings\User\workspace. Klik tombol OK untuk menerima lokasi default ini.

Welcome screen

Pada saat pertama kali menjalankan Eclipse akan muncul welcome screen dengan beberapa link untuk membantu kita dalam bekerja dengan Eclipse.



Eclipse Workbench


Jika Anda telah keluar dari welcome screen atau Anda melakukan klik pada icon Go to workbench maka selanjutnya Anda akan memasuki bagian utama dari Eclipse, yaitu Workbench.

Workbench adalah lingkungan kerja kita di Eclipse. Workbench ini terdiri dari beberapa jendela/window yang memiliki fungsionalitas tersendiri seperti console, progress, dsbnya.

Dan setiap jendela kemudian bisa dipadukan menjadi bagian dari beberapa perspective - yaitu suatu gabungan/group beberapa view window yang dapat mendukung suatu jenis project. Misalkan ada perspective debug dengan kumpulan window seperti breakpoint, console, variable, dsbnya.

 

Hubungan antara perspective dan view ini dapat dilihat pada gambar diagram berikut.





Pada saat pertama kali memasuki workbench ini maka perspective standarnya adalah Java. Anda bisa lihat informasi tersebut pada sudut kanan atas workbench ini.

Untuk melihat perspective lain,  klik icon di samping perspective aktif. Pilih other apabila tidak ada daftar perspective yang diinginkan.

Sebagai contoh pada gambar di samping ini saya memiliki perspective aktif Java dan daftar perspektif untuk Debug, Java, Java Browsing serta Other yang dapat kita pilih dan aktifkan setiap saat.



Kesimpulan


  • IDE seperti Eclipse dapat menunjang peningkatan produktivitas kita dalam menghasilkan aplikasi.
  • Syarat instalasi Eclipse sangat sederhana, cukup ada instalasi Java runtime.
  • Eclipse didistribusikan dalam berbagai paket sesuai dengan kebutuhan dari penggunanya seperti Eclipse Java IDE yang diperuntukkan untuk pemrograman Java standar, Eclipse C/C++ untuk programmer C/C++, Plugin/RCP developer untuk developer plugin, dsbnya.
  • Eclipse dapat dijalankan dengan modifikasi argumen baik di command line maupun di file eclipse.ini.
  • Workspace adalah tempat kita menyimpan konfigurasi dan hasil kerja dari proyek kita di Eclipse.
  • Workbench adalah lingkungan kerja yang sebenarnya dari Eclipse dimana workbench ini dapat berbeda-beda tergantung perpective yang kita pilih.
  • Setiap perspective memiliki kombinasi dari beberapa window/view. Dengan demikian setiap window/view bisa menjadi bagian dari beberapa perspective.

Friday, March 7, 2008

Using Regular Expression in Java

Regular expression (regex) is a very powerful construct to manipulate text. Originated its popularity from PERL language, it is now supported by almost every popular programming language including Java.

So, how do we use it in Java ?

It's easy, just take a look at following tips.

Matching a text pattern within a String object

To match a text pattern, we can use matches() method from String object. Its syntax definition as follow :

boolean java.lang.String.matches(String regex)

So, we see that matches() method take a pattern - which is a String object - and returns boolean value of a matching condition.

Example 1:

if(textToBeMatched.matches("[a-z A-Z]+"))
System.out.println("Text match with a series of alphabet and space character only pattern");


Example 2:

public class RegexTest {

public static void testPhoneNumber(String phoneNumber)
{
String phoneNumberPattern = "^\\+{0,1}[\\d]+[-\\d]+\\d$";

if(phoneNumber.matches(phoneNumberPattern))
System.out.println(phoneNumber + " is a correct phone number !");
else
System.out.println(phoneNumber + " is a wrong phone number !");
}
public static void main(String[] args)
{
testPhoneNumber("+6221-3011-9353"); //outputs a correct phone number
testPhoneNumber("-6221-3011-9353"); //outputs a wrong phone number
}
}


Replacing text that match a pattern

To replace a text matching a pattern we need to use two java.util classes, i.e : Pattern and Matcher.

First, we initialize the pattern with compile() static method of Pattern class. With which also create a Pattern object. We then feed a source text to the matcher() method which then create a Matcher object. The last thing for us to do is to manipulate the text within the object, so we replace text with Matcher's replaceAll() method.



Example:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexReplacementTest {

public static String censoredPhoneNumber(String phoneNumber)
{
String phonePattern = "(\\+{0,1}[\\d]+[-\\d]+\\d).*";

Pattern pattern = Pattern.compile(phonePattern);
Matcher matcher = pattern.matcher(phoneNumber);

return matcher.replaceAll("*censored*");
}

public static void main(String[] args)
{
String phoneNo = "My phone number is +6221-3011-9353";

System.out.println(censoredPhoneNumber(phoneNo));

}
}

Conclusion

This blog's article show how we use regular expression in two ways :
  1. to match a text pattern using String's matches() method.
  2. to replace string which match a text pattern with two helper classes, Pattern and Matcher.

Hope this article can help you to resolve text manipulation problem that you may have encountered.

Any comments to improve this article is greatly welcomed. Post your comment here or mail to feris@phi-integration.com.