Interceptor Dalam EJB

Bagaimana caranya jika sebelum atau dan sesudah satu method dapat menyiapkan atau melakukan sesuatu?
Bagaimana membuat class-class service yang kita lebih bersih dari hal2 diluar bisnis proses?

Jika rekan-rekan terbiasa dengan listener class dalam web aplikasi, seperti Session Listener, Request Listener atau Aplication Listener, maka cara kerja mereka sangat mirip jika tidak mau dikatakan sama. Method-method yang didefine sebagai callback akan diinvoke saat sesuatu terjadi, nah sesuatunnya ini tergantung callback yang mana atau apa dan siapa yang memanggilnya.

Dalam Statefull Session Bean (SFSB), Stateless Session (SLSB) , Message Driven Bean (MDB) atau bahkan Entity Bean, mereka semua memliki interceptor yang disebut callback.  Contoh callbak yang hanya dimiliki oleh SFSB adalag @PrePassivate dan @PostActivate. Kedua Callback ini terkait dengan daur hidup dari SFSB yang akan dipassivate saat instance nya, tidak digunakan dan time out agar dapat digunakan lagi nanti oleh clientnnya dan tidak perlu menginstantiate yang baru.

Setiap method yang didefinisikan @PrePassivate diatas methodnya, maka method tersebut akan dipanggil sesaatsebelum SFB tersebut di Passivete. Hal yang bisa dilakukan dalam method tersebut contohnya adalah menyimpan state dari SFSB tersebut. Dan setiap method yang didefine @PostActivate diatas method tersebut akan diinvoke sesaat setelah object SFSB tersebut di activate lagi container. Yang mentrigger SFSB tersebut di activate adalah adanya client yang membutuhkan SFSB tersebut. hal yang bisa dilakukan didalam method tersebut contohnya adalah meretrieve state yang disimpan saat sebelum di passivate. Dalam SFSB juga ada @Remove yang jika dipanggil maka akan memakas container untuk menghancurkan Object SFSB tersebut.

Jika @Prepassivate dan @PostPassivate digunakan oleh SLSB, maka tidak akan berpengaruh apa-apa, karena pada prinsipnya daur hidup SLSB yang mengatur adalah EJB container.

Semua component EJB memiliki callback @PostConstruct dan @PreDetroy. Dari nama annotation sudah kelihatan kapanm mereka diinvoke oleh container. Method yang diannotate @PostContruct dipanggil oleh container sesaat setelah object component EJB tersebut diinstantiate dan sebelum method-method yang lain dipanggil. Ia didedikasikan dan mendapat kehormatan untuk dipanggil oleh container pertama kali, sebelum yang lainnya. Dan setiap method yang diannotate @PostDestroy akan dipanggil sesaat sebelum component tersebut didestory. Ia disiapkan sebegai saksi dalam eksekusi penghancuran hisupnya component EJB.

Khusus untuk component Entity Bean, mereka memiliki callback tambahan yang terkait dengan data persistent milik mereka. Method @PostLoad akan dipanggil sesaat setelah data dari persistent diload kedalam object yang di intance. Hal yang bisa dilakukan dalam method ini contohnya adalah mengubah data type dan mengkonversinya sehingga dapat diassign pada member variable yang diannotate @Transient.

Selain  itu Entity Bean juga memiliki callback yang dapat ditebak kapan method tersebut akan dipanggil, yaitu;

@PrePersist, @PostPersist, @PreUpdate, @Postupdate , @PreRemove dan @PostRemove. Callback ini semua dapat digunakan untuk mencatat aktivitas yang terkait dengan table, misalnya mencatat siapa yang melakukan update satu data dan kapan terakhir diupdate, yang akan sangat penting untuk kepentingan audit.

Tagged: , , ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: