Musim semi vs EJB. Bisakah Spring menggantikan EJB? [Tutup]

96

Sejak Spring dapat menggunakan transaksi seperti EJB . Bagi saya, Spring mampu menggantikan kebutuhan penggunaan EJB. Adakah yang bisa memberi tahu saya apa saja keuntungan ekstra menggunakan EJB?

cometta
sumber

Jawaban:

201

Spring dikembangkan sebagai alternatif EJB sejak awal, jadi jawabannya tentu saja Anda dapat menggunakan Spring sebagai pengganti EJB.

Jika ada "keuntungan" menggunakan EJB, menurut saya itu akan bergantung pada keterampilan tim Anda. Jika Anda tidak memiliki keahlian Spring, dan banyak pengalaman EJB, mungkin tetap menggunakan EJB 3.0 adalah langkah yang baik.

Server aplikasi yang ditulis untuk mendukung standar EJB, secara teori, dapat di-porting dari satu server aplikasi Java EE yang sesuai ke yang lain. Tetapi itu berarti menjauh dari salah satu dan semua ekstensi khusus vendor yang mengunci Anda ke satu vendor.

Port pegas dengan mudah antara server aplikasi (misalnya, WebLogic, Tomcat, JBOSS, dll.) Karena tidak bergantung padanya.

Namun, Anda terkunci di Spring.

Spring mendorong praktik desain OO yang baik (misalnya, antarmuka, lapisan, pemisahan masalah) yang menguntungkan masalah apa pun yang mereka sentuh, bahkan jika Anda memutuskan untuk beralih ke Guice atau kerangka DI lain.

Update: Tanya jawab ini berusia lima tahun pada tahun 2014. Perlu dikatakan bahwa dunia pemrograman dan pengembangan aplikasi telah banyak berubah pada saat itu.

Ini bukan lagi hanya pilihan antara Java atau C #, Spring atau EJB. Dengan vert.x dimungkinkan untuk menghindari Java EE sama sekali. Anda dapat menulis aplikasi poliglot yang sangat skalabel tanpa server aplikasi.

Pembaruan: Sekarang Mar 2016. Spring Boot menawarkan cara yang lebih baik untuk menulis aplikasi tanpa server aplikasi Java EE. Anda dapat membuat JAR yang dapat dieksekusi dan menjalankannya di JVM.

Saya ingin tahu apakah Oracle akan terus mendukung spesifikasi Java EE. Layanan web telah mengambil alih untuk EJB. Solusi EJB sudah mati. (Hanya pendapat saya.)

duffymo
sumber
7
Menurut pendapat saya, "mengunci" adalah frasa yang terlalu kuat untuk menggambarkan Spring. Lagipula, Spring dirancang untuk merekatkan semuanya, bukan untuk menggantinya, Anda selalu dapat memilih dengan apa Anda ingin mengintegrasikan. Selain itu, semuanya memiliki lock-in, bahkan Apache Commons yang paling sederhana pun mengunci kami, tetapi kami masih menggunakannya setiap hari.
Christopher Yang
3
Tidak ada vendor alternatif untuk VMWare / Spring cara Anda dapat memilih antara platform Oracle, Red Hat, dan IBM untuk Java EE. Itu saja yang saya maksud. Ini bukan komentar tentang kemampuan atau kegunaan Spring. Saya sangat menyukainya. Saya menggunakannya setiap hari dan tidur di malam hari.
duffymo
1
@ChopherYang itu benar. Maksud saya, "Java" akan menjadi vendor lock-n. Jadi pada akhirnya, kita hanya perlu berhenti berdebat dan menyelesaikan sesuatu. :-)
cbmeeks
4
Pertanyaan ini hampir berumur lima tahun. Secara pribadi, saya pikir EJB adalah teknologi kuno yang telah kalah dalam segala hal dengan layanan web HTTP. Kemenangan sederhana dan terbuka. Beri saya layanan REST dan Anda dapat menyimpan EJB Anda. Spring mendukung mereka dengan baik. Di situlah dunia pergi.
duffymo
1
Terima kasih balasannya. Hanya mencari manfaat sebagai mengevaluasi yang lebih baik (SPRING, EJB 3.x) untuk migrasi dari aplikasi EJB 2.1 yang ada. Satu pertanyaan lagi, EJB 3.x juga mendukung WebService. Jadi, dapatkah kita memanfaatkan JNDI / RMI untuk distribusi aplikasi Java dan WS untuk aplikasi lain?
bangsawan
48

Pertama, izinkan saya mengatakannya dengan jelas, saya tidak mengatakan Anda tidak boleh menggunakan Spring tetapi, karena Anda meminta beberapa keuntungan, berikut setidaknya dua di antaranya:

  • EJB 3 adalah standar sedangkan Spring tidak (ini adalah standar de facto tapi itu bukan hal yang sama) dan ini tidak akan berubah di masa mendatang. Meskipun Anda dapat menggunakan framework Spring dengan server aplikasi apa pun, aplikasi Spring dikunci ke dalam Spring itu sendiri dan layanan spesifik yang Anda pilih untuk diintegrasikan di Spring.

  • Framework Spring berada di atas server aplikasi dan pustaka layanan. Kode integrasi layanan (misalnya templat akses data) berada dalam kerangka kerja dan diekspos ke pengembang aplikasi. Sebaliknya, kerangka kerja EJB 3 diintegrasikan ke dalam server aplikasi dan kode integrasi layanan dienkapsulasi di belakang antarmuka. Vendor EJB 3 dengan demikian dapat mengoptimalkan kinerja dan pengalaman pengembang dengan bekerja di tingkat server aplikasi. Misalnya, mereka dapat mengikat mesin JPA secara erat dengan manajemen transaksi JTA. Contoh lainnya adalah dukungan clustering yang transparan bagi pengembang EJB 3.

EJB 3 tidak sempurna, masih kekurangan beberapa fitur (misalnya injeksi komponen yang tidak dikelola seperti POJO sederhana).

Pascal Thivent
sumber
1
Jawaban pendidikan, tetapi saya bertanya-tanya mengapa / kapan Anda perlu menyuntikkan POJO sederhana alih-alih menginisialisasi yang baru?
Ömer Faruk Almalı
4
Untuk tujuan pengujian.
Philip
22

Poin Pascal valid. Namun, ada hal-hal berikut yang mendukung Spring.

  • Spesifikasi EJB sebenarnya agak longgar, dan oleh karena itu perilaku yang berbeda dapat diamati dengan server aplikasi yang berbeda. Ini tidak akan benar untuk kebanyakan kasus, tentu saja, tapi saya punya masalah untuk beberapa "sudut gelap".

  • Musim semi memiliki banyak kelebihan, seperti uji pegas, AOP, MVC, integrasi JSF, dll. EJB memiliki beberapa di antaranya (pencegat, misalnya), tetapi menurut saya tidak begitu berkembang.

Kesimpulannya, itu tergantung terutama pada kasus Anda.

Bozho
sumber
Mungkin sesuatu seperti Spring hanya membutuhkan mesin servlet akan lebih akurat (EJB dapat digunakan di kontainer JEE apa pun, mesin servlet! = Kontainer JEE).
Pascal Thivent
1
Secara teknis, Spring juga tidak membutuhkan mesin servlet. Misalnya uji pegas menggunakan konteks dalam memori.
Bozho
3
Nah, secara teknis, EJB tidak memerlukan wadah mandiri juga jika Anda menggunakan cara ini. Sejak EJB 3.1 ada EJBContainer.createEJBContainer()API standar untuk menggunakan wadah tertanam. Jadi, tetap saja pernyataan Anda salah.
Pascal Thivent
ok, 3.1 cukup baru dan jelas saya lupa tentang penambahannya. Menghapus poin itu dari jawaban saya.
Bozho
-30

Pegas dimaksudkan untuk melengkapi EJB, bukan untuk menggantikannya. Musim semi adalah lapisan di atas EJB. Seperti yang kita ketahui, coding EJB dilakukan dengan menggunakan API, yang artinya kita harus mengimplementasikan semua yang ada di API menggunakan framework Spring. Kita bisa membuat kode pelat ketel, lalu ambil pelat itu, tambahkan beberapa barang ke dalamnya, lalu semuanya selesai. Secara internal Spring terhubung dengan EJB - Spring tidak akan ada tanpa EJB.

Keuntungan utama menggunakan Spring adalah tidak ada kopling sama sekali antar kelas.

sasi
sumber
8
Anda benar-benar salah, maaf
Jakub H
2
maaf @sasi ini bahkan tidak mendekati jawaban yang benar atau bagus .......
Prakash
4
"Musim semi tidak akan ada tanpa EJB." Man, apakah kamu nyata? Pernahkah dalam hidup Anda menggunakan "\ @Stateless" dalam deklarasi EJB, atau menggunakan penjelasan \ @EJB untuk injeksi? Apakah menurut Anda itu akan berhasil di Jetty atau Tomcat? Menurut Anda, bagaimana transaksi dikelola di bawah musim semi? Anda tahu bahwa Anda dapat menerapkan aplikasi Spring ke dalam wadah servlet, bukan?
99Sono
Maaf, tetapi Anda memiliki pemahaman yang kurang terstruktur tentang keduanya, EJB sebagai bagian dari Java EE dan pegas sebagai prinsip konvensi-over-konfigurasi. Pada kenyataannya, jika Anda tidak menggali lebih dalam, Anda mungkin akan berpikir bahwa mereka adalah hal yang sama atau terkait atau apa pun jenis itu. Mengapa? keduanya memiliki kesamaan seperti injeksi, tetapi perbedaan di antara keduanya sangat besar. Memang benar Spring lahir sebagai alternatif dari EJB kembali ke masa lalu karena kompleksitas EJB tapi kenyataannya begitu. Cukup baik selama Time of Java EE 5 (EJB 3) diperbaiki juga melakukan seperti yang dilakukan musim semi dengan COC mereka
Ishimwe Aubain Consolateur