Jakarta Enterprise Beans

**Jakarta Enterprise Beans** (**EJB**; sebelumnya **Enterprise JavaBeans**)  adalah salah satu dari beberapa API Java untuk konstruksi modular perangkat lunak perusahaan. EJB adalah komponen perangkat lunak sisi peladen yang merangkum logika bisnis suatu aplikasi. Sebuah kontainer web EJB menyediakan lingkungan waktu proses untuk komponen perangkat lunak terkait web, termasuk keamanan komputer, manajemen siklus hidup java servlet, pemrosesan transaksi, dan layanan web lainnya. Spesifikasi EJB adalah bagian dari spesifikasi Java EE.

## Spesifikasi
Spesifikasi EJB awalnya dikembangkan pada tahun 1997 oleh IBM dan kemudian diadopsi oleh Sun Microsystems (EJB 1.0 dan 1.1) pada 1999 dan ditingkatkan di bawah Proses Komunitas Java sebagai JSR 19 (EJB 2.0), JSR 153 (EJB 2.1), JSR 220 (EJB 3.0), JSR 318 (EJB 3.1) dan JSR 345 (EJB 3.2).

Spesifikasi EJB menyediakan cara standar untuk mengimplementasikan perangkat lunak 'bisnis' sisi peladen (juga disebut "back-end") yang biasanya ditemukan dalam aplikasi perusahaan (berlawanan dari perangkat lunak antarmuka pengguna 'front-end'). Perangkat lunak ini mengatasi jenis masalah yang sama, dan solusi dari masalah ini sering kali diimplementasikan berulang kali oleh pemrogram. Jakarta Enterprise Beans dimaksudkan untuk menangani masalah umum seperti persistensi, integritas transaksional, dan keamanan dengan cara standar, membiarkan pemrogram untuk bebas berkonsentrasi pada bagian-bagian tertentu dari perangkat lunak perusahaan yang ada.

## Sifat
* 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
* 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.
* 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
* 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.

## 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 objek. 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 method yang telah Anda deklarasikan di Remote interface, sebagaimana juga di Home interface.

## Cara Kerja
EJB dijalankan dalam *kontainer* EJB, biasanya dalam server aplikasi. Spesifikasi menjelaskan bagaimana EJB berinteraksi dengan *kontainer*nya dan bagaimana kode klien berinteraksi dengan kombinasi kontainer/EJB. Kelas EJB digunakan oleh aplikasi termasuk dalam *package* `[https://javaee.github.io/javaee-spec/javadocs/javax/ejb/package-summary.html javax.ejb]`. (*Package* `[https://javaee.github.io/javaee-spec/javadocs/javax/ejb/spi/package-summary.html javax.ejb.spi]` adalah sebuah antarmuka penyedia layanan hanya digunakan oleh implementasi kontainer EJB.).

Klien EJB tidak membuat *instance bean* tersebut secara langsung melalui operator baru Java, tetapi melainkan harus memperoleh referensi melalui container EJB. Referensi ini biasanya bukan referensi ke implementasi bean itu sendiri, tapi ke sebuah proksi, yang secara dinamis mengimplementasikan antarmuka bisnis lokal atau jarak jauh yang diminta klien atau sub-tipe dari bean sebenarnya. Proksi kemudian dapat langsung diberikan ke antarmuka atau kacang masing-masing. Sebuah klien dikatakan memiliki 'tampilan' pada EJB, dan antarmuka lokal, antarmuka jarak jauh dan subtipe kacang itu sendiri masing-masing sesuai dengan tampilan lokal, tampilan jarak jauh dan tampilan tanpa antarmuka.

Proksi ini diperlukan untuk memberikan kontainer EJB kesempatan untuk secara transparan menyediakan layanan lintas sektoral (seperti AOP) untuk ke sebuah bean seperti transaksi, keamanan, intersepsi, injeksi, dan jarak jauh. Sebagai contoh, klien memanggil metode pada proksi, yang pertama-tama akan memulai transaksi dengan bantuan kontainer EJB dan kemudian memanggil metode kacang yang sebenarnya. Saat metode bean kembali, proxy mengakhiri transaksi (yaitu dengan melakukan atau melakukan pembalikan) dan mentransfer kendali kembali ke klien.

Kontainer EJB bertanggung jawab untuk memastikan kode klien memiliki hak akses yang memadai ke EJB. Aspek keamanan dapat diterapkan secara deklaratif pada EJB melalui anotasi.

## Referensi

## Pranala luar

* 
* Java EE 8 API Javadocs
* EJB 3.0 API Javadocs
* Spesifikasi EJB 3.0
* Tutorial Sun EJB 3.0
* Glosarium EJB (3.0)
* EJB FAQ
* JSR 345 (EJB 3.2)
* JSR 318 (EJB 3.1)
* JSR 220 (EJB 3.0)
* JSR 153 (EJB 2.1)
* JSR 19 (EJB 2.0)
* "Working with Message-Driven Beans" from EJB3 in Action, Second Edition
* Klien memanggil EJB