Session bean, baik stateful maupun stateless, mempunyai struktur yang sama 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 stateless session bean
@Remote
public interface ItemManager {
public Item addItem(String itemTitle, String itemDesc, User seller, Set
public void deleteItem(Item item);
public void updateItem(Item item);
public void undoChangeItem(Item item);
public Item findItem(Long itemId);
public List
public List
public List
public List
}
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.
@Stateless
public class ItemManagerBean implements ItemManager {
public Item addItem(String itemTitle, String itemDesc, User seller, Set
// TODO:
}
public void deleteItem(Item item) {
// TODO:
}
public void undoChangeItem(Item item) {
// TODO:
}
public void updateItem(Item item) {
// TODO:
}
public Item findItem(Long itemId) {
// TODO:
}
public List
// TODO:
}
public List
// TODO:
}
public List
// TODO:
}
public List
// TODO:
}
}
POJO hanya perlu implements POJI yang sudah dibuat sebelumnya. @Stateless memberitahu EJB container bahwa class tsb adalah stateless session bean. Selanjutnya EJB container akan menyediakan service-service untuk stateless session bean tsb seperti pooling, transaction management, dll.
Untuk memanggil bean di atas dari sebuah client cukup dengan annotation @EJB saja seperti berikut
@EJB
private static ItemManager itemManager;
public static void main(String args[]) {
Item myItem1 = itemManager.findItem(2L);
myItem1.setItemTitle("Pintu Ajaib");
itemManager.updateItem(myItem1);
}
Dengan menggunakan @EJB, container menangani semua hal yang berhubungan dengan bean tsb. Behind the scene, saat container mendapati annotation maka container melakukan lookup dan mengeset nilai
Bagaimana lifecycle stateless session bean? Jika bean berada dalam EJB container, maka bean tsb disebut container-managed bean. Artinya container bertanggung jawab terhadap lifecycle bean mulai dari kapan bean diciptakan, kapan dependency injection berjalan, kapan bean dimusnahkan, dan kapan melakukan optimalisasi saat dibutuhkan. Stateless session bean memiliki 2 lifecycle, creation dan destruction, dan keduanya ditangani EJB container.
Lifecycle session bean dimulai ketika instance diciptakan. Hal ini terjadi biasanya ketika client melakukan lookup ke bean tsb melalui JNDI atau dependency injection. Berkaitan dengan lifecycle bean tsb, ada dua callback method yang bisa dijalankan masing-masing pada saat creation dan destruction. Method tersebut bisa kita tentukan di dalam session bean dengan menggunakan annotation @PostConstruct dan @PreDestroy, masing-masing untuk creation dan destruction.
Seperti telah saya sebutkan di atas bahwa stateless session bean digunakan untuk memodelkan proses bisnis yang bisa dilakukan dengan satu method call. Ini berarti bahwa kita tidak boleh menyimpan suatu nilai pada class variable session bean untuk digunakan kemudian. Mengapa? Hal ini disebabkan cara EJB container yang mengorganisir stateless session menggunakan pooling sehingga tidak dapat dipastikan bahwa sebuah client selalu dilayani oleh bean yang sama. Selain itu imbas penggunaan pooling adalah resource yang digunakan dapat dimaksimalkan karena server tidak akan dibebani oleh banyaknya bean yang bergentayangan.
0 comments:
Post a Comment