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();

}

}

}

Tidak ada komentar: