Sebenarnya apa itu Java EE? [Tutup]

100

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!

SnakeDoc
sumber
5
FYI, jenis pertanyaan ini (banyak pertanyaan terbuka dalam satu postingan) tidak dianggap konstruktif di SO. Silakan baca FAQ dan Cara Meminta tip untuk menulis pertanyaan yang baik.
Jim Garrison
6
dan sudah ditutup ... Alangkah baiknya jika semua ini dijawab di tempat yang sama oleh orang-orang yang telah menggunakannya, alih-alih mencari di seluruh internet ....
Daniel Ryan
18
SO menjadi semakin kaku dan tidak dapat digunakan. Ada suatu masa ketika semua orang pintar di sini berusaha membantu satu sama lain. Sekarang setiap pertanyaan ditutup dalam 5 menit. Itu hanya terlalu diatur dan tidak dapat digunakan dan membuat frustrasi. Apakah semua admin yang menghapus wikipedia datang ke sini?
pengguna573215
34
Saya suka pertanyaan Anda dan sudah mengetik jawaban, ketika sebuah pesan muncul, mengatakan bahwa pertanyaan ini telah ditutup. AFAI bisa melihat dalam hal ini aturannya adalah masalahnya. Meskipun saya melihat tujuan QA dan regulasi secara umum, saya mempertanyakan apakah aturan semacam ini berfungsi dengan baik di situs seperti ini. Ketika saya mulai mengunjungi SO yang tidak pernah memperhatikan ada masalah tanpa aturan itu. Sekarang SO sudah sangat diatur, tidak membantu lagi dan hanya membuat frustrasi. Sekarang ini adalah situs arsip. Ada begitu banyak orang pintar di sekitar sini. Mari kita bahas teknologi sampai kepala kita terbakar dan tidak saling menghalangi.
pengguna573215
6
Ya, saya memilih untuk menutup pertanyaan ini (jadi pergi dan temukan beberapa jawaban yang telah saya lakukan dan pilih :)). Pertanyaan ini bisa dengan mudah dijawab oleh Google. Java EE dan mengapa itu ada adalah topik yang sangat hangat . Ini seperti bertanya mengapa Emacs ada atau Silverlight atau Flash atau perpustakaan / aplikasi / kerangka perangkat lunak apa pun. Pertanyaannya bukanlah pertanyaan yang bagus karena ini seperti 40 pertanyaan, dan karena ini bukan pertanyaan pemrograman.
Adam Gent

Jawaban:

39

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:

  1. Untuk kompilasi Anda hanya membutuhkan API jar, yang di bawah 1MB untuk Profil Web, dan sedikit di atas 1MB untuk profil lengkap.
  2. Untuk menjalankan Anda jelas membutuhkan implementasi, tetapi "masif" terlalu melebih-lebihkan. OpenJDK misalnya berukuran sekitar 75MB dan TomEE (implementasi Profil Web yang berisi dukungan email) hanya 25MB. Bahkan GlassFish (implementasi Profil Lengkap) hanya 53MB.
  3. Mail bekerja dengan sangat baik dari Java SE (dan dengan demikian Tomcat) juga menggunakan mail.jar mandiri dan activation.jar .

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.

Arjan Tijms
sumber
3
ini adalah jawaban yang sangat bagus dan ringkas untuk pertanyaan di atas. Ini memecahnya sehingga bahkan pengembang non-java ee dapat memahami konsepnya. Terima kasih.
SnakeDoc
12

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".

jahroy
sumber
Biarkan saja, tidak ada salahnya ... Saya hanya menyarankan Anda mengatakan bahwa fungsionalitas JavaEE berlaku terutama untuk server / kontainer daripada membutuhkannya .
entonio
9

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.

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).

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.

Mengapa saya membutuhkan sesuatu yang besar seperti JBoss hanya untuk mengkompilasi kode sederhana untuk mengirim email?

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.

Mengapa pustaka Java EE tidak "standar" dan disertakan dalam unduhan JVM reguler dan / atau SDK?

Karena hanya API yang distandarisasi, bukan implementasinya.

Mengapa ada begitu banyak penawaran Java EE

Karena orang tidak setuju tentang cara yang benar untuk mengimplementasikan fitur tertentu. Karena vendor yang berbeda bersaing memperebutkan pangsa pasar.

Apa yang dapat dilakukan dengan Java EE yang tidak dapat mereka lakukan dengan Java standar?

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.

Apa yang dapat dilakukan dengan Java standar yang tidak dapat mereka lakukan dengan Java EE?

Tidak ada, karena Java EE menyertakan Java SE.

Kapan developer memutuskan bahwa mereka "membutuhkan" Java EE? Kapan developer memutuskan bahwa mereka tidak membutuhkan Java EE?

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.

manfaat
sumber
8

Apa itu Java EE?

Mari kita mulai dari definisi kanonik di wiki:

Platform Java, Edisi Perusahaan atau Java EE adalah platform komputasi Java perusahaan Oracle. Platform ini menyediakan API dan lingkungan runtime untuk mengembangkan dan menjalankan perangkat lunak perusahaan, termasuk layanan jaringan dan web, dan aplikasi jaringan berskala besar, bertingkat, dapat diskalakan, andal, dan aman lainnya.

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.

Maxim Kolesnikov
sumber
6

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.

Mengobrol
sumber
2
Anda dapat melihat container sebagai framework besar, tetapi Sun (Oracle :() hanya memberikan spesifikasi dan banyak orang yang mengimplementasikannya. Sedangkan framework klasik umumnya disediakan / diimplementasikan hanya oleh satu aktor (springsource dan spring misalnya)
Gab
ini adalah duplikat, lihat stackoverflow.com/questions/106820/what-is-java-ee untuk penjawab lain.
Gab
pertanyaan itu tidak hanya bertanggal, tetapi mengacu pada J2EE vs JEE. Pertanyaan / utas ini telah memicu segunung informasi terkini dan mendidik yang secara langsung berkaitan dengan JEE dan apa intinya. Saya akan mengatakan utas ini jauh lebih informatif daripada tautan bertanggal itu, dan kualitas jawaban yang tercantum di sini lebih unggul daripada tautannya.
SnakeDoc
jika ada yang tahu apa sebenarnya java ee, mereka akan bisa menjelaskannya yang bisa dimengerti oleh anak berusia 6 tahun. semakin rumit sebuah "penjelasan", semakin sedikit mereka yang mengetahuinya.
pengguna2914191
@ user2914191 Beberapa konsep memerlukan latar belakang yang belum dimiliki oleh anak usia 6 tahun yang normal, misalnya entropi dalam fisika. Mungkin Anda datang ke sini karena kesalahan, jika demikian Anda dapat kembali lagi nanti.
Gab