Selasa, 11 Maret 2008

Java XML API Programming

Java XML API Programming

XML merupakan kependekan dari Extensible Markup Language. Teknologi yang digunakan pada XML sebenarnya bukan teknologi baru, tapi merupakan turunan dari SGML yang telah dikembangkan pada awal 80-an dan telah banyak digunakan pada dokumentasi teknis proyek-proyek berskala besar.

Seperti halnya HTML, XML juga menggunakan elemen yang ditandai dengan tag pembuka (diawali dengan ‘<’ dan diakhiri dengan ‘>’), tag penutup(diawali dengan ‘’) dan atribut elemen (parameter yang dinyatakan dalam tag pembuka misal

). Hanya bedanya, HTML medefinisikan dari awal tag dan atribut yang dipakai didalamnya, sedangkan pada XML kita bisa menggunakan tag dan atribut sesuai kehendak kita. Untuk lebih jelasnya perhatikan penjelasan berikut bagaimana membuat dokumen XML yang baik.

Heading standard untuk Document XML

Biasakanlah setiap membuat dokumen XML diawali dengan heading standard XML. Formatnya adalah sebagai berikut:

Dokumen XML harus memiliki Root tag

Sebuah dokumen XML yang baik harus memiliki root tag. yaitu tag yang melingkupi keseluruhan dari dokumen. Tag-tag yang lain, disebut child tag, berada didalam root membentuk hirarki seperti contoh berikut:

Contoh:

XML Sifatnya Case Sensitive

Tag XML merupakan case sensitive, karena itu kita harus teliti dalam hal ini. Tidak seperti HTML yang relatife bebas, jika dalam XML tag berbeda dengan karena sifat case sensitive (sama seperti Java), maka huruf besar kecilnya juga harus benar-benar sama.

JDOM (Java Document Object Model)

Merupakan salah satu Java Library API dan digunakan untuk menghadirkan kemudahan dan efisiensi dalam pembacaan, manipulasi, menulis dalam suatu dokumen XML.

JDOM terdiri dari 5 package:

C. Langkah-Langkah :

Membuat File XML Biodata.xml

Source 8.5 Biodata.xml

Asisten

JAVA

Informatika

Yogyakarta

55121

Indonesia

(0274)121212

0818418112

Laki-Laki

Manager

Manager Education

Programmer JAVA

Membuat Program InOutXML.java

Source 8.6 InOutXML.java

import java.io.File;

import org.jdom.Document;

import org.jdom.input.SAXBuilder;

import org.jdom.output.XMLOutputter;

public class InOutXML {

public InOutXML() {

// Asumsi definisi baca file XML

String filename = "c:\\Biodata.xml";

try {

// Build w/ SAX

SAXBuilder b = new SAXBuilder();

// Buat Document

Document doc = b.build(new File(filename));

// Untuk Menampilkan Output XML ke Layar

XMLOutputter outputter = new XMLOutputter();

outputter.output(doc, System.out);

} catch (Exception e) {

e.printStackTrace(); }}

public static void main(String[] args) {

new InOutXML();

} }

Senin, 10 Maret 2008

Enterprise Java Bean

JBOSS

JBoss merupakan enterprise application server di mana Anda bisa men-deploy EJB. Setelah di-deploy di JBoss, EJB Anda akan siap bekerja di dalam JBoss melayani client.

Enterprise Java Bean (EJB)

Enterprise Java Bean (EJB) merupakan teknologi untuk mengembangkan komponen di sisi server yang scalable , transactional dan secure untuk aplikasi enterprise.

  1. Scalable

EJB dirancang untuk bisa scalable, yaitu untuk bisa menangani jumlah concurent user yang membesar. Scalability bisa dicapai dengan vertical scalability yaitu dengan menambahkan memory maupun processor dari sebuah mesin, atau dengan membuat cluster di mana EJB di- deploy di beberapa mesin

  1. Transactional

EJB dirancang untuk mendukung transaction, di mana satu rentetan perubahan data diperlakukan sebagai satu kesatuan. Sebagai contoh, dalam aplikasi e-banking, di mana user melakukan transfer uang dari satu account ke account lain. Dalam operasi ini terdapat dua buah perubahan data setidaknya yaitu pengurangan jumlah uang dari account pengirim, dan penambahan jumlah uang ke account penerima. Dua buah perubahan data ini dipandang sebagai satu kesatuan. Jika salah satu gagal, maka keduanya dibatalkan.

  1. Secure

EJB juga bisa dirancang untuk secure, dengan menerapkan Role-Based Access Control di mana user-user dengan role tertentu saja yang bisa mengakses komponen-komponen EJB tertentu

  1. Transparancy

EJB juga mendukung location transparancy, di mana EJB bisa di-deploy di enterprise application server yang lokasinya bisa di mana saja. Client dari EJB akan menemukan EJB ini dengan melakukan lookup ke directory server.

Untuk mengembangkan EJB, langkah pertama menuliskan source code, kemudian melakukan compilasi (compile), selanjutnya menuliskan deployment descriptor, dan langkah terakhir mendeploy ke application server.

Perlu ditekankan, EJB berbeda dengan Swing maupun JSP yang menyediakan user interface, namun EJB bekerja di back-end. EJB menyediakan service yang dipanggil oleh client. Client dari EJB bisa berupa stand alone application dengan Swing, ataupun web-based application dengan JSP.

Teknologi-Teknologi Pendukung:

  1. Remote Method Invocation (RMI)

digunakan untuk mengembangkan aplikasi terdistribusi dengan Java. Dengan RMI, sebuah obyek yang berada di sebuah JVM, dapat memanggil obyek lain yang berada di JVM yang terpisah.

  1. Java Naming and Directory Interface (JNDI)

Dalam arsitektur EJB digunakan oleh client untuk menemukan komponen EJB.

  1. Java Database Connectivity (JDBC)

Digunakan untuk berinteraksi dengan Database.

  1. Java Transaction Service (JTS)

Digunakan untuk menyediakan transaction dalam arsitektur EJB

3 Tipe Utama EJB:

Tipe Pertama SessionBean

Session Bean digunakan untuk mereprsentasikan proses, kendali dan alur kerja. Contohnya, session bean digunakan untuk melakukan validasi credit card, mencariketersediaan jadwal penerbangan, dan menyimpan shopping cart. Session Bean bisa Stateless atau Stateful. SessionBean tidak disimpan di dalam database, dan tidak akan survive jika server mengalami crash. Session bean hanya diakses oleh satu client, dan transactional.

Tipe Kedua EntityBean

Entity Bean digunakan untuk merepresentasikan business obyek. Contohnya, entity bean digunakan untuk merepresentasikan Product, Order, Student, Course, Employee, dan To Do. Entity Bean tersimpan di database, jika server mengalami crash dia akan survive. Terdapat dua strategi penyimpanan yaitu Bean Managed Persistence dan Container Managed Persistence. Entity Bean adalah di-share oleh banyak client dan transactional.

Tipe Ketiga MessageDrivenBean

MessageDriven Bean digunakan untuk menyediakan layanan asynchronous messaging. Source Code dan Deployment Descriptor Untuk mengembangkan sebuah Enterprise Java Bean, dan wajib menuliskan source code untuk Home interface, Remote interface, dan bean implementation

Home interface ditulis dengan meng-extends EJBHome. Di home interface, Anda mendeklarasikan method untuk meng-create EJB object. Home interface akan diimplementasikan oleh enterprise application server, dan dikenal sebagai EJB home.

Remote interface ditulis dengan meng-extends EJBObject. Di remote interface, Anda mendeklarasikan method-method yang disediakan untuk melayani client. Di Session Bean, method-method ini bisa berupa business method. Di Entity Bean, method-method ini bisa berupa setter dan getter method.

Remote interface juga akan diimplementasikan oleh enterprise application server. Dalam implementasinya, yang dikenal sebagai EJB object, masing-masing method akan menginvoke method yang bersesuaian di bean implementation. EJB object menyediakan

service-service tambahan seperti security, dan transaction.

Bean implementation adalah Java class di mana Anda mengimplementasikan methodmethod yang telah Anda deklarasikan di Remote interface, sebagaimana juga di Home interface.

Cara Kerja EJB:

Dalam aplikasi EJB, Kita akan bekerja dengan EJB home, EJB object dan bean implementation.

EJB home menyediakan method-method create, finder dan remove untuk EJB Object.

EJB Object adalah jembatan antara client dengan bean implementation.

Dari sisi client, client tidak bisa meng-create secara langsung bean implementation. Dan client juga tidak pernah berhubungan langsung dengan bean implementation. Client bisa me-lookup Home object menggunakan Java Naming and Directory Interface.

Home object adalah class yang di-generate oleh enterprise application server, yang meng-implement Home interface. Melalui Home object ini, client meng-create EJB Object. Untuk Entity Bean, Home object juga mempunyai finder method dan remove method. Selanjutnya client bisa meng-invoke method-method di EJB Object. EJB Object adalah class yang di-generate oleh enterprise application server, yang meng-implement Remote interface. Dalam implementasi dari method-method yang dideklarasikan di Remote interface, akan di- invoke method bersesuaian di bean implementation.

B. Langkah-Langkah Implementasi.

Pertama Siapkan dahulu Application Servernya.

JBoss (Application Servernya)

Buat Program JogjaEjbHome.java

import java.rmi.RemoteException;

import javax.ejb.CreateException;

import javax.ejb.EJBHome;

/**

*

* @author Rudy Listyanto N

*/

public interface JogjaEjbHome extends EJBHome {

public JogjaEjb create() throws RemoteException,CreateException ;

}

Buat Program JogjaEjb.java

import java.rmi.RemoteException;

import javax.ejb.EJBObject;

/**

*

* @author Rudy Listyanto N

*/

public interface JogjaEjb extends EJBObject {

public String getPesan() throws RemoteException;

}

Buat Program JogjaEjbBean.java

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

/**

*

* @author Rudy Listyanto N

*/

public class JogjaEjbBean implements SessionBean {

public String getPesan(){

return "Belajar EJB Pertama Kali nih";

}

public void ejbCreate() {}

public void ejbRemove() {}

public void ejbActivate() {}

public void ejbPassivate() {}

public void setSessionContext(SessionContext sc) {}

}

Buat sub directory META-INF

Tuliskan ejb-jar.xml dan simpan ke dalam sub directory META-INF

"-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"

"http://java.sun.com/dtd/ejb-jar_2_0.dtd">

Enterprise Java Lab

Enterprise Java Lab

JogjaEjb

JogjaEjbHome

JogjaEjb

JogjaEjbBean

Stateless

Bean

Kemudian gabungkan kedalam sebuah jar.

jar cvf jogjaejb.jar JogjaEjb.class JogjaEjbHome.class JogjaEjbBean.class META-INF

Kemudian akan tercipta sebuah file jogjaejb.jar

Kemudian copykan file jogjaejb.jar ke dalam C:\jboss-4.0\server\default\deploy

Module EJB yang telah di-deploy di atas di dalam JBoss enterprise application server dan siap melayani request dari client.

Dan untuk mengakses Stateless Session Bean dari sebuah stand alone Java application , Langkah selanjutnya Buat Program JogjaEjbApp.java:

import java.util.Properties;

import javax.naming.InitialContext;

import javax.rmi.PortableRemoteObject;

/**

*

* @author Rudy Listyanto N

*/

public class JogjaEjbApp {

public static void main(String[]args){

try {

Properties props = new Properties();

props.setProperty(

"java.naming.factory.initial",

"org.jnp.interfaces.NamingContextFactory"

);

props.setProperty(

"java.naming.provider.url",

"localhost:1099"

);

InitialContext jndiCtx = new InitialContext(props);

Object referens = jndiCtx.lookup("JogjaEjb");

JogjaEjbHome home = (JogjaEjbHome)

PortableRemoteObject.narrow(referens,JogjaEjbHome.class);

JogjaEjb ejb = home.create();

String pesan = ejb.getPesan();

System.out.println(pesan);

} catch (Exception e) {

e.printStackTrace();

}

}

}

Reporting With JasperReport And iReport (Java)

JasperReport

JasperReport merupakan library di lingkungan Java untuk pemroses laporan. Dengan library ini, kita dapat menampilkan laporan dalam bentuk print preview, melakukan export ke beberapa format dokumen lain (antara lain PDF, HTML, text, Excel), menampilkan gambar, grafik maupun tabel. Berikut beberapa library lain yang digunakan juga dalam JasperReport : commons-beanutils.jar, commons-collections.jar, commons-digester.jar, commons-logging.jar, itext-1.02b.jar, jfreechart-0.9.21.jar.

Penjelasan mengenai fungsi-fungsi tiap library yang digunakan:

Library

Keterangan

commons-logging

untuk mengirim output ke log

commons-collections

untuk manage collection data

commons-beanutils

untuk java beans

commons-digester

untuk parsing xml

jfreechart

untuk mengatur penggunaan grafik

itext

untuk export report ke pdf atau rtf

Laporan yang kita buat nantinya dapat dikaitkan ke database berdasar connection string dan sql yang kita inginkan. JasperReport mendasarkan format dokumen definisi laporan yang akan dikompilasi berbasis pada XML, sehingga nantinya dapat dengan mudah dapat dikonversi ke format dokumen lain dengan memanfaatkan XSLT ataupun FO (Format Object).

B. Langkah-Langkah

Buat File FirstReport.jrxml

PUBLIC "-//JasperReports//DTD Report Design//EN"

"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">

Keterangan :

<> menggambarkan teks statis yang tidak tergantung pada datasources

manapun , variabel, parameter.

<> menggambarkan lebar dan posisi unsur <> itu.

<> menggambarkan teks statis yang nyata yang dipertunjukkan pada laporan itu

Buat Program CallFirstReport.java

Source CallFirstReport.java

public class CallFirstReport {

public CallFirstReport() {

try {

JasperCompileManager.compileReportToFile("c:\\FirstReport.jrxml");

JasperFillManager.fillReportToFile("c:\\FirstReport.jasper",

new HashMap(), new JREmptyDataSource());

JasperViewer.viewReport("c:\\FirstReport.jrprint", false);

}catch (Exception ex) {

System.out.println("Gagal Membuat report " + ex);

}}

public static void main(String[] args) {

new CallFirstReport();

}

}

File FirstReport.jrxml merupakan contoh desain template sederhana untuk membuat suatu report dengan menampilkan hasil ini file jasperku yang pertama, belum jika nanti ada banyak desain – desain dan data-data yang lain. Bayangkan saja, kita harus mengetahui dan hafal tag-tag dalam JasperReport dan harus pintar-pintar mengatur bentuknya. Betapa reportnya kita nanti dalam menyusun suatu desain. Tapi kita tidak perlu cemas, karena sekarang ada tools untuk memudahkan kita untuk membuat desain jasper dengan lebih mudah dan efisien. Tools itu bernama iReport, versi terbaru waktu menulis modul ini, iReport versi 2.0.4.

iReport

iReport 2.0.4 adalah merupakan perangkat lunak bantu untuk perancangan laporan secara visual yang nantinya dapat di kompilasi dengan menggunakan JasperReport sehingga menjadi file *.jasper atau *.jrxml yang dapat langsung dipanggil oleh program Java.

Komponen-komponen iReport :

1. Koneksi Database / Datasource

Sebelum kita memulai mendesain sebuah report dalam iReport, terlebih dahulu langkah yang kita harus lakukan adalah kita harus melakukan koneksi ke database. Dalam hal ini kita akan membuat koneksi database dengan menggunakan JDBC Connection.

Langkah-langkahnya adalah:

  1. Pilih Data -> Connection/Datasource, Klik new, akan muncul wizard.
  2. Pilih “Database JDBC Connection”. Kemudian akan muncul form Connections properties.
  3. Kemudian Name diisi dengan nama Koneksi
  4. JDBC Driver diisi dengan kelas driver yang akan digunakan. Misal kita akan menggunakan Database MySQL, sehingga driver classnya diisi dengan “com.mysql.jdbc.Driver”.
  5. JDBC URL diisi dengan url dari database yang akan digunakan. Misal kita akan menggunakan Database MySQL dengan dijalankan di localhost dan nama databasenya rudy, maka penulisan urlnya menjadi “jdbc:mysql://localhost/rudy”.
  6. User Name dan Password diisi dengan username dan password untuk login ke dalam database yang digunakan.
  7. Kemudian klik save untuk menyimpan koneksi atau klik test untuk mengecek apakah konfigurasi telah sesuai.

Gambar Tampilan Konfigurasi koneksi ke database

2. Query Database

Langkah selanjutnya setelah kita berhasil membuat koneksi ke database di iReport, selanjutnya kita perlu membuat query yang digunakan untuk menampilkan data yang ingin kita tampilkan.

  1. Pilih Data -> Report Query
  2. Kemudian isikan Query database pada text area yang berada di tengah form.
  3. Setelah Query diisikan kemudian akan muncul field-field dari hasil query tersebut. Field-field tersebut berada dalam tabel yang berada di bagian bawah form.

Sekarang kita telah mendapatkan field-field dari database, yang nantinya akan digunakan untuk keperluan desain report.

Gambar Tampilan Report Query

Dalam iReport ada 3 komponen utama yang digunakan untuk menampung data yaitu Field, Variable dan Parameter. Komponen-komponen tersebut dapat dilihat pada bagian Document Structure.

Gambar Tampilan Document Structure

3. Field

Field digunakan untuk menampung data hasil dari query database. Seperti contoh diatas ada 3 buah field yaitu ID, NAMA_ASISTEN dan STATUS.

4. Variables

Variables digunakan untuk menampung data yang akan digunakan di dalam report. pada iRepot telah tersedia beberapa variables build in antara lain PAGE_NUMBER, COLUMN_NUMBER, REPORT_COUNT, PAGE_COUNT, COLUMN_COUNT. kita juga bisa mendefinisikan variables custom dengan cara klik kanan node variables pada document structure pilih add -> variables.

5. Parameters

Parameters digunakan untuk masukan atau melewatkan data dari kode Java ke dalam report. iReport juga telah menyediakan beberapa parameters build in dan kita juga bisa menambahkan parameters sesuai dengan yang kita butuhkan. dengan cara klik kanan node parameters pada document structure pilih add -> parameters.

6. Design

Setelah kita melewati beberapa langkah diatas, kita telah siap untuk mendesain report. untuk mendesainnya kita cukup melakukan Drag and Drop saja, komponen-komponen yang kita butuhkan ke dalam bidang desain.

Gambar Tampilan Bidang Desain

Pada bidang desain terbagi menjadi 9 bidang desain yaitu title, pageHeader, columnHeader, detail, columnFooter, pageFooter, lastPageFooter, summary dan Background. Ke sembilan bidang desain itu, kita dapat mengatur ukurannya sesuai dengan kehendak kita dan bahkan juga dapat kita hilangkan. Untuk mengaturnya klik kanan bidang desain kemudian pilih band properties.

Penjelasan mengenai 9 bidang desain dibawah ini:

1. Background

Background disini dapat diisi dengan gambar maupun text, yang nantinya akan menjadi background pada setiap halaman dalam report.

2. title

title akan dicetak sekali pada bagian paling atas report. title ini dapat diisi dengan judul report atau kop report.

3. pageHeader

pageHeader akan dicetak pada bagian atas di setiap report.

4. columnHeader

columnHeader akan dicetak pada bagian atas tabel / kolom pada report. biasanya digunakan untuk nama kolom.

5. detail

detail adalah isi dari report itu sendiri. Biasanya komponen yang berada pada detail ini adalah field yang nantinya akan dicetak sebanyak data dari hasil query database.

6. columnFooter

penjelasannya sama dengan columnHeader, hanya saja dicetak di bagian bawah.

7. pageFooter

penjelasannya sama dengan pageHeader, hanya saja dicetak pada bagian bawah.

8. lastPageFooter

lastPageFooter akan dicetak sekali pada bagian bawah halaman report paling belakang

9. summary

summary akan dicetak pada halaman paling belakang dari report. biasanya diisi dengan grafik atau keterangan umum dari report.

Buat Program Java ShowReport.java

import java.sql.*;

import java.util.*;

import net.sf.jasperreports.engine.*;

import net.sf.jasperreports.view.JasperViewer;

public class ShowReport {

public static Connection connectDB (String databaseName,

String userName, String password) {

Connection connection = null;

try {

Class.forName("com.mysql.jdbc.Driver");

connection = DriverManager.getConnection

("jdbc:mysql://localhost/rudy", "root", "rudy");

} catch (Exception ex) {

System.out.println(“Tidak dapat terhubung” + ex);

}

return connection;

}

public void viewReport() {

try {

Map map = new HashMap();

map.put("v_asisten", "Java");

JasperDesign jasperDesign = JRXmlLoader.load

("c:\\classic.jrxml");

JasperReport jasperReport = JasperCompileManager.

compileReport(jasperDesign);

Connection connection = connectDB

("jdbc:mysql://localhost/rudy", "root", "rudy");

JasperPrint jasperPrint = JasperFillManager.

fillReport(jasperReport, map, connection);

JasperViewer.viewReport(jasperPrint);

} catch (Exception ex) {

System.out.println("Gagal Membuat report " + ex);

}

}

public static void main(String[] args) {

ShowReport report = new ShowReport();

report.viewReport();

}

}