Java EE memiliki "selubung misterius" di sekelilingnya untuk developer Java yang lebih muda - salah satu yang telah saya coba angkat cukup lama dengan sedikit keberhasilan.
Kebingungan muncul dari:
Java EE tampaknya merupakan pustaka dan platform - ada beberapa cara untuk "mendapatkan" pustaka Java EE, biasanya dari sesuatu seperti unduhan Java EE SDK Oracle. Namun, pustaka Java EE tidak akan berfungsi, atau dikompilasi kecuali jika kode Anda sedang dijalankan atau memiliki akses ke server aplikasi Java EE (seperti JBoss, GlassFish, Tomcat, dll). Mengapa? Tidak dapatkah perpustakaan berfungsi di luar lingkungan server aplikasi? Mengapa saya membutuhkan sesuatu yang besar seperti JBoss hanya untuk mengkompilasi kode sederhana untuk mengirim email?
Mengapa pustaka Java EE tidak "standar" dan disertakan dalam unduhan JVM reguler dan / atau SDK?
Mengapa ada begitu banyak penawaran Java EE padahal sebenarnya hanya ada dua rasa utama dari Java standar (Oracle JVM / SDK | OpenJDK JVM / JDK)?
Apa yang dapat dilakukan dengan Java EE yang tidak dapat mereka lakukan dengan Java standar?
Apa yang dapat dilakukan dengan Java standar yang tidak dapat mereka lakukan dengan Java EE?
Kapan developer memutuskan bahwa mereka "membutuhkan" Java EE?
Kapan developer memutuskan bahwa mereka tidak membutuhkan Java EE?
Mengapa versi library Java EE tidak sinkron dengan rilis library Java standar (Java EE 6 vs. Java 7)?
Terima kasih telah membantu saya membersihkan cambuk!
sumber
Jawaban:
Mengapa pustaka tidak dapat berfungsi di luar lingkungan server aplikasi?
Sebenarnya mereka bisa. Sebagian besar pustaka dapat langsung digunakan mandiri (di Java SE) atau disertakan dalam .war (hampir selalu Tomcat). Beberapa bagian Java EE, seperti JPA, memiliki bagian eksplisit dalam spesifikasinya masing-masing yang memberi tahu cara kerja dan penggunaan di Java SE.
Jika ada, bukan hanya lingkungan server aplikasi yang dipertaruhkan di sini, tetapi keberadaan semua perpustakaan lain dan kode integrasi yang menyatukannya.
Karena itu, anotasi akan dipindai hanya sekali untuk semua kelas Anda, bukan setiap perpustakaan (EJB, JPA, dll) melakukan pemindaian ini berulang kali. Karena itu, penjelasan CDI dapat diterapkan ke biji EJB dan pengelola entitas JPA dapat disuntikkan ke dalamnya.
Mengapa saya membutuhkan sesuatu yang besar seperti JBoss hanya untuk mengkompilasi kode sederhana untuk mengirim email?
Ada beberapa hal yang salah dengan pertanyaan ini:
Mengapa pustaka Java EE tidak "standar" dan disertakan dalam unduhan JVM reguler dan / atau SDK?
Java EE adalah salah satu upaya pertama untuk membagi JDK yang sudah besar menjadi beberapa bagian yang lebih mudah untuk dikelola dan diunduh. Orang-orang sudah mengeluh bahwa kelas grafis (AWT, Swing) dan Applet ada di dalam JRE ketika yang mereka lakukan hanyalah menjalankan beberapa perintah di server tanpa kepala. Dan kemudian Anda juga ingin memasukkan semua pustaka Java EE di JDK standar?
Dengan rilis dukungan modularitas, kami hanya akan memiliki JRE basis kecil dengan banyak hal yang dapat diinstal secara terpisah sebagai paket. Mungkin suatu saat nanti banyak atau bahkan semua kelas yang sekarang membuat Java EE akan menjadi paket seperti itu juga. Waktu akan menjawab.
Mengapa ada begitu banyak penawaran Java EE padahal sebenarnya hanya ada dua rasa utama dari Java standar (Oracle JVM / SDK | OpenJDK JVM / JDK)?
Ada lebih dari dua rasa Java SE. Setidaknya ada JDK IBM, BEA sebelumnya (JRocket, yang digabungkan menjadi Oracle / Sun karena akuisisi), berbagai implementasi open source lainnya, dan banyak implementasi untuk penggunaan yang disematkan.
Alasan di balik Java SE dan EE menjadi spesifikasi adalah karena banyak vendor dan organisasi dapat menerapkannya dan dengan demikian mendorong persaingan dan mengurangi risiko vendor lock-in.
Ini benar-benar tidak berbeda dengan kompiler C dan C ++, di mana Anda memiliki banyak penawaran yang bersaing dan semuanya mengikuti standar C ++.
Mengapa versi pustaka Java EE tidak sinkron dengan rilis pustaka Java standar (Java EE 6 vs. Java 7)
Java EE dibangun di atas Java SE, sehingga tertinggal. Versi memang sesuai. Java EE 5 membutuhkan Java SE 5. Java EE 6 membutuhkan Java SE 6 dan seterusnya. Hanya saja kebanyakan saat Java SE X sudah ada, maka Java EE X-1 sudah ada.
sumber
Berikut adalah beberapa jawaban yang dibuat dengan cepat untuk pertanyaan Anda ...
Mengapa pustaka JavaEE tidak dapat berfungsi tanpa server aplikasi? Layanan yang disediakan oleh JavaEE (transaksi yang dikelola kontainer, injeksi ketergantungan yang dikelola kontainer, layanan pengatur waktu, dll ..) secara inheren melibatkan Server Aplikasi yang sesuai dengan JavaEE (misalnya: GlassFish, JBoss, WebSphere, dll ...). Oleh karena itu pustaka JavaEE tidak berfungsi tanpa wadah seperti itu. “ Mengapa saya membutuhkan sesuatu yang sebesar JBoss hanya untuk mengkompilasi kode sederhana untuk mengirim email? ” Tidak. Ada beberapa cara untuk mengirim email tanpa JavaEE ... Tetapi jika Anda ingin melakukannya dengan cara JavaEE, Anda memerlukan container JavaEE.
Mengapa pustaka JavaEE tidak disertakan dengan unduhan JavaSE? Alasan yang sama bahwa banyak pustaka tidak disertakan: itu akan berlebihan. Karena Anda bahkan tidak dapat menggunakan pustaka JavaEE tanpa server aplikasi, mengapa repot-repot memasukkannya? JavaEE harus diunduh jika dan ketika pengembang memasang server aplikasi dan memutuskan untuk menggunakan JavaEE.
Mengapa ada begitu banyak penawaran JavaEE? Apakah benar-benar ada " begitu banyak " penawaran JavaEE? Jika demikian, harap sebutkan beberapa di antaranya. Lebih akuratnya, saya yakin ada beberapa implementasi dari API yang sama .
Apa yang dapat dilakukan dengan JavaEE yang tidak dapat mereka lakukan tanpa Java standar? Banyak. Anda tidak dapat mengandalkan server aplikasi untuk mengelola transaksi atau konteks persistensi tanpa JavaEE. Anda tidak dapat mengizinkan server aplikasi untuk mengelola injeksi ketergantungan EJB tanpa JavaEE. Anda tidak dapat menggunakan layanan pengatur waktu yang dikelola aplikasi tanpa JavaEE. Jawaban atas pertanyaan ini seharusnya membuat jawaban atas pertanyaan pertama cukup jelas ... Sebagian besar layanan yang disediakan oleh JavaEE memerlukan container JavaEE.
Apa yang dapat Anda lakukan dengan JavaSE yang tidak dapat Anda lakukan dengan JavaEE? Um ... Saya tidak tahu.
Kapan pengembang memutuskan bahwa mereka membutuhkan JavaEE? Pertanyaan ini sepenuhnya subjektif ... Tetapi jika Anda membutuhkan layanan apa pun yang disediakan oleh JavaEE, Anda mulai memikirkannya. Jika Anda tidak tahu apa itu JavaEE ... Anda mungkin tidak membutuhkannya.
Kapan pengembang memutuskan bahwa mereka tidak membutuhkan JavaEE? Lihat jawaban sebelumnya.
Mengapa versi pustaka JavaEE tidak sinkron dengan versi JavaSE? Pertanyaan bagus. Saya tidak akan berpura-pura tahu bagaimana menjawabnya ... Tapi saya kira jawabannya adalah: "karena mereka tidak sinkron".
sumber
Sekilas pandang, Java EE adalah platform, yaitu sesuatu yang bisa kita bangun.
Mengambil perspektif yang lebih teknis, standar Java Enterprise Edition mendefinisikan sekumpulan API yang biasa digunakan untuk membangun aplikasi perusahaan. API ini diimplementasikan oleh server aplikasi - dan ya, server aplikasi yang berbeda bebas menggunakan implementasi Java EE API yang berbeda.
Anda melakukan kompilasi terhadap Java EE API, jadi Anda hanya memerlukan API tersebut pada waktu kompilasi. Saat runtime, Anda juga memerlukan implementasi API ini, misalnya server aplikasi.
Kamu tidak. Namun, jika Anda ingin menggunakan Java EE API untuk mengirim email, Anda memerlukan implementasi API tersebut saat runtime. Ini bisa disediakan oleh server aplikasi, atau disediakan oleh perpustakaan berdiri sendiri yang Anda tambahkan ke jalur kelas Anda.
Karena hanya API yang distandarisasi, bukan implementasinya.
Karena orang tidak setuju tentang cara yang benar untuk mengimplementasikan fitur tertentu. Karena vendor yang berbeda bersaing memperebutkan pangsa pasar.
Karena implementasi Java EE dibangun dengan "Java standar": Tidak ada. Namun, memanfaatkan pustaka yang ada dapat menghemat banyak usaha jika Anda memecahkan masalah perusahaan yang khas, dan menggunakan API standar dapat mencegah vendor terkunci.
Tidak ada, karena Java EE menyertakan Java SE.
Secara umum, Java EE API memecahkan masalah umum yang berulang dalam komputasi perusahaan. Jika Anda memiliki masalah seperti itu, biasanya masuk akal untuk menggunakan solusi standar - tetapi jika Anda memiliki masalah yang berbeda, solusi yang berbeda mungkin diperlukan. Misalnya, jika Anda perlu berbicara dengan database relasional, Anda harus mempertimbangkan untuk menggunakan JPA. Tetapi jika Anda tidak memerlukan database relasional, JPA tidak akan membantu Anda.
sumber
Apa itu Java EE?
Mari kita mulai dari definisi kanonik di wiki:
Poin utama di sini adalah bahwa Java EE adalah platform yang menyediakan API, bukan perpustakaan konkret.
Apa yang dibutuhkan Java EE?
Cakupan utama Java EE adalah aplikasi berbasis jaringan, tidak seperti Java SE yang berorientasi pada pengembangan aplikasi desktop dengan dukungan jaringan sederhana. Inilah perbedaan utama di antara mereka. Skalabilitas, pengiriman pesan, transaksi, dukungan DB untuk setiap aplikasi ... kebutuhan dalam semua ini telah meningkat dengan evolusi jaringan. Tentu saja banyak solusi siap pakai yang disediakan Java SE yang berguna untuk pengembangan jaringan, sehingga Java EE memperluas Java SE.
Mengapa kita membutuhkan server aplikasi untuk menjalankan kode kita?
Mengapa kita membutuhkan sistem operasi? Karena ada banyak pekerjaan menyakitkan dengan perangkat keras yang perlu kita lakukan untuk membuat aplikasi yang paling sederhana. Dan tanpa OS Anda perlu melakukannya lagi dan lagi. OS yang terlalu disederhanakan hanyalah wadah terprogram, yang memberi kita konteks global untuk menjalankan aplikasi kita.
Dan inilah server aplikasi. Mereka memungkinkan kita untuk menjalankan aplikasi kita dalam konteksnya dan memberi kita banyak fungsi tingkat tinggi yang diperlukan untuk aplikasi jaringan beban tinggi perusahaan. Dan kami tidak ingin menulis sepeda sendiri untuk menyelesaikan masalah ini, kami ingin menulis kode yang akan memenuhi kebutuhan bisnis kami.
Contoh lain di sini adalah JVM untuk Java.
Mengapa Java EE tidak berisi server aplikasi onboard?
Sulit untuk dikatakan untukku. Saya pikir, itu dilakukan untuk lebih banyak fleksibilitas. Java EE mengatakan apa yang harus mereka lakukan, mereka memutuskan bagaimana melakukannya.
Mengapa JVM tidak menyertakan Java EE?
Karena mereka diarahkan ke sektor pasar yang berbeda. Java EE memiliki banyak fungsi yang tidak diperlukan untuk desktop biasa.
Mengapa ada begitu banyak penawaran Java EE?
Karena Java EE hanya menggambarkan perilakunya. Semua orang bisa menerapkannya.
Apa yang dapat dilakukan dengan Java EE yang tidak dapat mereka lakukan dengan Java SE?
Untuk menaklukkan internet. Sangat sulit untuk dilakukan dengan applet dan soket Java SE :)
Apa yang dapat dilakukan dengan Java SE yang tidak dapat mereka lakukan dengan Java EE?
Seperti disebutkan di atas Java EE memperluas Java SE, jadi dengan Java EE Anda harus dapat melakukan semua yang tersedia untuk Java SE.
Kapan developer memutuskan bahwa mereka "membutuhkan" Java EE?
Saat mereka membutuhkan kekuatan Java EE. Semua yang disebutkan di atas.
Kapan developer memutuskan bahwa mereka tidak membutuhkan Java EE?
Ketika mereka menulis aplikasi konsol atau desktop biasa.
Mengapa versi Java SE dan Java EE tidak disinkronkan?
Java selalu bermasalah dengan teknologi penamaan dan versinya. Jadi situasi ini tidak terkecuali.
sumber
Java EE adalah tentang konsep kontainer.
Container adalah konteks eksekusi yang akan menjalankan aplikasi Anda dan yang menyediakan sekumpulan layanan terakhir ini. Setiap jenis layanan ditentukan oleh spesifikasi bernama JSR. Misalnya JSR 907, JTA (java transaction Api) yang menyediakan cara standar untuk mengelola transaksi terdistribusi terhadap sumber daya yang berbeda.
Umumnya ada banyak implementasi berbeda untuk JSR tertentu, implementasi yang akan Anda gunakan bergantung pada penyedia penampung, tetapi Anda tidak terlalu mempermasalahkannya karena Anda yakin perilaku tersebut mengikuti kontrak yang telah ditentukan: JSR API.
Jadi untuk memanfaatkan Java EE, Anda perlu menjalankan aplikasi Anda di dalam container. Dua yang utama adalah EJB dan servlet container yang keduanya ada di server aplikasi bersertifikasi Java EE.
Tujuan dari semua ini adalah untuk menentukan lingkungan eksekusi standar yang memungkinkan untuk mengemas aplikasi Anda hanya dengan yang penting, id.est. urusanmu. Ini menghindari untuk bergantung pada kumpulan pustaka pihak ketiga yang tidak diketahui dan beragam yang harus Anda paketkan dan sediakan dengan aplikasi Anda jika tidak, dan yang mungkin menjadi sumber konflik dengan aplikasi lain di server. Di Java EE Anda tahu bahwa semua persyaratan non-fungsional standar seperti keamanan, transaksi, skalabilitas, pemanggilan jarak jauh, dan banyak lagi akan disediakan oleh penampung (difaktorkan untuk semua aplikasi yang berjalan di dalamnya) dan Anda hanya perlu mendasarkan pekerjaan Anda padanya.
sumber