Saat ini memang agak membingungkan karena sekarang ada beberapa model komponen di Java EE. Mereka adalah Kacang Dikelola CDI , EJB3 dan JSF .
CDI adalah anak baru di blok itu. Fitur kacang CDI dependency injection
, scoping
dan file event bus
. Biji CDI adalah yang paling fleksibel dalam hal injeksi dan pelingkupan. Bus acara sangat ringan dan sangat cocok untuk aplikasi web yang paling sederhana sekalipun. Selain itu, CDI juga menampilkan fitur yang sangat canggih yang disebut portable extensions
, yang merupakan semacam mekanisme plug-in bagi vendor untuk menyediakan fungsionalitas tambahan pada Java EE yang dapat tersedia di semua implementasi (Glassfish, JBoss AS, Websphere, dll) .
EJB3Biji dipasang dari model komponen EJB2 lama * dan merupakan biji pertama di Java EE yang dikelola biji melalui anotasi. Kacang EJB3 fitur dependency injection
, declarative transactions
, declarative security
, pooling
, concurrency control
, asynchronous execution
dan remoting
.
Injeksi ketergantungan pada biji EJB3 tidak sefleksibel biji CDI dan biji EJB3 tidak memiliki konsep pelingkupan. Namun, biji EJB3 bersifat transaksional dan dikumpulkan secara default ** , dua hal yang sangat berguna yang telah dipilih CDI untuk ditinggalkan dalam domain EJB3. Item lain yang disebutkan juga tidak tersedia dalam CDI. EJB3 tidak memiliki event bus-nya sendiri, tetapi EJB3 memiliki jenis kacang khusus untuk mendengarkan pesan; pesan didorong kacang. Ini dapat digunakan untuk menerima pesan dari Sistem Pesan Java atau dari sistem lain yang memiliki adaptor sumber daya JCA. Menggunakan perpesanan lengkap untuk acara sederhana jauh lebih berat daripada bus acara CDI dan EJB3 hanya mendefinisikan pendengar, bukan API produsen.
Kacang Terkelola JSF telah ada di Java EE sejak JSF disertakan. Mereka juga menampilkan dependency injection
dan scoping
. Kacang Terkelola JSF memperkenalkan konsep pelingkupan deklaratif. Awalnya cakupannya agak terbatas dan dalam versi Java EE yang sama di mana biji EJB3 sudah dapat dideklarasikan melalui anotasi, Kacang Terkelola JSF masih harus dideklarasikan dalam XML. Versi saat ini dari Kacang Terkelola JSF juga akhirnya dideklarasikan melalui anotasi dan cakupannya diperluas dengan cakupan tampilan dan kemampuan untuk membuat cakupan khusus. Cakupan tampilan, yang mengingat data di antara permintaan ke halaman yang sama adalah fitur unik dari Kacang Terkelola JSF.
Terlepas dari cakupan tampilan, masih sangat sedikit yang terjadi untuk JSF Managed Beans di Java EE 6. Cakupan tampilan yang hilang di CDI sangat disayangkan, karena jika tidak, CDI akan menjadi kumpulan super sempurna dari apa yang ditawarkan JSF Managed Beans. Pembaruan : Di Java EE 7 / JSF 2.2, @ViewScoped yang kompatibel dengan CDI telah ditambahkan, membuat CDI memang set super sempurna. Pembaruan 2 : Di JSF2.3, biji yang dikelola JSF sudah tidak digunakan lagi karena biji yang dikelola CDI.
Dengan EJB3 dan CDI situasinya tidak begitu jelas. Model dan API komponen EJB3 menawarkan banyak layanan yang tidak ditawarkan CDI, jadi biasanya EJB3 tidak dapat digantikan oleh CDI. Di sisi lain, CDI dapat digunakan dalam kombinasi dengan EJB3 - misalnya menambahkan dukungan cakupan ke EJB.
Reza Rahman, anggota kelompok ahli dan pelaksana implementasi CDI yang disebut CanDI, telah sering mengisyaratkan bahwa layanan yang terkait dengan model komponen EJB3 dapat dipasang sebagai sekumpulan penjelasan CDI. Jika itu terjadi, semua biji yang dikelola di Java EE bisa menjadi biji CDI. Ini tidak berarti bahwa EJB3 menghilang atau menjadi usang, tetapi fungsinya akan diekspos melalui CDI alih-alih melalui anotasi EJB sendiri seperti @Stateless dan @EJB.
Memperbarui
David Blevins dari TomEE dan OpenEJB ketenaran menjelaskan perbedaan dan persamaan antara CDI dan EJB dengan sangat baik di blognya: CDI, kapan harus keluar dari EJB
* Meskipun ini hanya peningkatan dalam nomor versi, kacang EJB3 sebagian besar adalah jenis kacang yang sama sekali berbeda: pojo sederhana yang menjadi "kacang terkelola" dengan menerapkan anotasi tunggal sederhana, vs model di EJB2 di mana kelas berat dan Deskripsi penyebaran XML yang terlalu bertele-tele diperlukan untuk setiap kacang, selain kacang yang diperlukan untuk mengimplementasikan berbagai kelas yang sangat berat dan sebagian besar antarmuka komponen yang tidak berarti.
** Biji sesi tanpa status biasanya dikumpulkan, biji sesi berstatus biasanya tidak (tetapi bisa juga). Karenanya, untuk kedua jenis penggabungan bersifat opsional dan spesifikasi EJB tidak mengamanatkannya.