Monday, July 13, 2009

Stateless VS Stateful Bean in EJB

Contoh ini akan memperlihatkan perbedaan dua Session Beans yang dimiliki oleh EJB, yaitu Stateless dan Stateful Bean.

Contoh ini dibuat menggunakan Eclipse dengan perspective J2EE, gw menggunakan eclipse dengan tujuan mempermudah saat mem-build aplikasi, tapi kalo lo mau pake IDE lain atau bahkan dengan scratch dari notepad, mangga dipersilakan.

Pertama kita buat Stateful Bean :

package com.duniaku.stateful.test;

public interface HelloStateful {
public String sayHelloStateful();
public String sayHelloStatefulRemote();
public void setMember(String member);
}



package com.duniaku.stateful.test;

public interface HelloStatefulLocal {
public String sayHelloStateful();
public String sayHelloStatefulLocal();
public void setMember(String member);
}

package com.duniaku.stateful.test;

public class HelloStatefulBean implements HelloStateful, HelloStatefulLocal{
private String member = "Not Set !!";

public String sayHelloStateful() {
// TODO Auto-generated method stub
return "Hello stateful " + member;
}

public String sayHelloStatefulRemote() {
// TODO Auto-generated method stub
return "Hello remote stateful " + member;
}

public void setMember(String member) {
// TODO Auto-generated method stub
this.member = member;
}

public String sayHelloStatefulLocal() {
// TODO Auto-generated method stub
return "Hello local stateful " + member;
}
}

Kemudian kita buat Untuk Stateless bean nya

package com.duniaku.stateless.test;

public interface HelloStateless {
public String sayHelloStateless(); 
public String sayHelloStatelessRemote(); 
public void setMember(String member); 
}


package com.duniaku.stateless.test;

public interface HelloStatelessLocal {
public String sayHelloStateless(); 
public String sayHelloStatelessLocal(); 
public void setMember(String member); 
}


package com.duniaku.stateless.test;

public class HelloStatelessBean implements HelloStateless, HelloStatelessLocal {

private String member = "Not Set !!";

public String sayHelloStateless() {
// TODO Auto-generated method stub
return "Hello stateless "+ member;
}

public String sayHelloStatelessRemote() {
// TODO Auto-generated method stub
return "Hello remote stateless "+ member;
}

public void setMember(String member) {
// TODO Auto-generated method stub
this.member = member;
}

public String sayHelloStatelessLocal() {
// TODO Auto-generated method stub
return "Hello local stateless "+ member;
}

}



Kemudian kita buat ejb-jar.xml nya


JBoss Stateless And Stateful Session Bean Tutorial
JBoss Stateless And Stateful Bean Tutorial

  
   HelloStateless
   com.duniaku.stateless.test.HelloStatelessLocal
   com.duniaku.stateless.test.HelloStateless
   com.duniaku.stateless.test.HelloStatelessBean
  





  
    com.duniaku.stateless.test.HelloStatelessBean
    Stateless
    Container
  
  
    HelloStateful
    com.duniaku.stateless.test.HelloStatelessLocal
  





  
    
      com.duniaku.stateful.test.HelloStatefulLocal
      com.duniaku.stateful.test.HelloStateful
    
  




  
    com.duniaku.stateful.test.HelloStateful
    com.duniaku.stateful.test.HelloStatefulBean
  




  
    
      com.duniaku.stateful.test.HelloStatefulBean
      Stateful
      Container
    
  



Kemudian di root folder buat file jndi.properties dengan isi sebagai berikut :

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099


Kemudian build, dan buat jar file nya, caranya :
- Masuk ke command prompt
- Masuk ke direktori root aplikasi
- jar semua file yang ada di direktori tersebut: caranya :
buat zip dari file2 yan hendak dimasukkan ke jar file tadi, kemudian setelah jadi, rename namanya menjadi .jar asalnya .zip

Kemudian simpan file jar tersebut di %JBOSS_HOME%\server\default\deploy lalu jalankan JBOSS AS lo.

Setelah itu masih di direktori yang terdapat jar tadi, jalankan clientnya dengan cara sbb :
$> java -cp TestEJBSessionBean.jar;%JBOSS_HOME%\client\jbossall-client.jar com.duniaku.stateful.test.client.Client


outputnya akan seperti ini :
Hello Stateful Not set!
Hello Stateful Initialized!
Hello Stateful Not set!
Hello Stateless Not set!
Hello Stateless Init!
Hello Stateless Init!

Kemudian jalankan client sekali lagi, dan perhatikan outputnya akan seperti ini :
Hello Stateful Not set!
Hello Stateful Initialized!
Hello Stateful Not set!
Hello Stateless Init!
Hello Stateless Init!
Hello Stateless Init!

Yang di bold di atas adalah perbedaan antara stateless dan stateful ...., perhatikan perbedaannya. Saat stateful di inisialisasi, kemudian lo buat instance baru lagi, memory akan di refresh oleh instance baru tersebut.
Tapi saat stateless yang diinisialisasi dia tetap memiliki nilai saat inisialisasi meskipun menggunakan instance yang baru. Dia baru bisa berubah menjadi uninitialized lagi saat server me refresh seluruh alokasi memori dan ini biasa terjadi + 1/2 jam sekali.

1 comment: