Struktur stateful session bean sama dengan stateless session bean yaitu terdiri dari sebuah POJI (Plain Old Java Interface) dan sebuah POJO (Plain Old Java Object). Keduanya tidak perlu extend class atau implements interface apapun.
Contoh stateful session bean
public interface ShoppingCart {
public void initialize();
public void addItem(String item);
public Collection
public void finished();
}
POJI hanya perlu menambahkan sebuah annotation @Remote atau @Local saja. @Remote berarti bean bisa diakses secara remote lewat RMI oleh client. @Local annotation berarti bahwa POJI tsb hanya bisa diakses secara lokal oleh komponen-komponen dari dalam EJB container.
@Stateful
public class ShoppingCartBean implements ShoppingCart {
private ArrayList
public void addItem(String item) {
items.add(item);
}
@Remove
public void finished() {
Iterator
while(iter.hasNext()) {
System.out.println("Anda membeli " + iter.next());
}
items = null;
}
public Collection
return items;
}
@PostConstruct
public void initialize() {
items = new ArrayList
}
POJO hanya perlu implements POJI yang sudah dibuat sebelumnya. @Stateful memberitahu EJB container bahwa class tsb adalah stateful session bean. Ada satu annotation yang menarik di sana yaitu @Remove. Tidak seperti stateless session bean, satu stateful session bean melayani satu client. Jika dalam sekali waktu terdapat banyak client yang melakukan request, maka bisa dipastikan akan membebani server. Untuk itulah @Remove dibuat. Method yang mempunyai @Remove di atasnya, jika dipanggil maka akan mengakhiri stateful session bean. Jika kita tidak mendeklarasikan method yang memiliki @Remove atau tidak pernah memanggil method tersebut maka bean akan terus ada dan bergentayangan di memori. Untuk mengatasi hal ini, EJB memiliki cara tersendiri yang disebut activation/passivation.
Untuk memanggil bean di atas dari sebuah client cukup dengan annotation @EJB saja seperti berikut
@EJB
private static ShoppingCart shoppingCart;
public static void main(String[] args) {
shoppingCart.addItem("Item A");
shoppingCart.finished();
}
Berkaitan dengan lifecycle bean tsb, ada empat callback method yang bisa dijalankan masing-masing pada saat setelah creation, sebelum destruction, sebelum passivation, dan setelah activation. Method tersebut bisa kita tentukan di dalam session bean dengan menggunakan annotation @PostConstruct, @PreDestroy, @PrePassivate, @PostActivate, masing-masing untuk creation, destruction, passivation, dan activation.
Dengan manajemen stateful session bean yang '1 client 1 instance', bisa dipastikan jika ada ribuan client yang mengakses bersamaan berpotensi menyebabkan sistem down. Untuk itu harus dilakukan perhitungan matang agar session bean digunakan hanya jika benar-benar dibutuhkan. Dan selalu deklarasikan @Remove dan pastikan agar setiap langkah akhir yang dilakukan client selalu memanggil method tersebut. Misalnya kita mempunyai 2 method remove, satu saat user menekan submit dan satu saat menekan cancel. Dan lakukan tuning pada EJB container untuk menentukan timeout yang tepat bagi aplikasi yang kita buat.
0 comments:
Post a Comment