Apa perbedaan antara Tomcat, JBoss dan Glassfish?

445

Saya mulai melihat ke Enterprise Java dan buku yang saya ikuti menyebutkan bahwa ia akan menggunakan JBoss. Netbeans dikirimkan bersama Glassfish. Saya telah menggunakan Tomcat di masa lalu.

Apa perbedaan antara ketiga program ini?

samoz
sumber
70
pertanyaan-pertanyaan ini adalah 'kutukan' dari opensource. Terkadang ada terlalu banyak pilihan yang melakukan hal yang hampir sama persis. Untuk pemula, dapat menyebabkan kelumpuhan dengan analisis. Eclipse adalah IDE dominan namun hampir semua buku yang layak dibeli menggunakan netbeans untuk dikembangkan dan diajarkan. Ia menggunakan GlassFish ketika saya melihat sebagian besar bisnis menggunakan Jboss dalam kehidupan nyata. Ada kurva belajar untuk menggunakan setiap wadah, dan itu bisa membuat frustasi bagi pemula.
user798719
Sekarang JBoss dikenal sebagai [WildFly] ( en.wikipedia.org/wiki/WildFly ) dan JBoss adalah perusahaan yang dikembangkan WildFly.
Chaminda Bandara
Pertanyaan Serupa: Profil Web Java EE vs Java EE Platform Penuh
Basil Bourque

Jawaban:

516

Tomcat hanyalah wadah servlet, yaitu hanya mengimplementasikan servlet dan spesifikasi JSP. Glassfish dan JBoss adalah server Java EE lengkap (termasuk hal-hal seperti EJB, JMS, ...), dengan Glassfish menjadi implementasi referensi dari tumpukan Java EE 6 terbaru, tetapi JBoss pada 2010 belum sepenuhnya mendukungnya.

Petar Minchev
sumber
77
Catatan untuk pembaca, JBoss sekarang bersertifikat Java EE 6 Full Profile seperti GlassFish. Selain itu Tomcat sekarang Java EE 6 Web Profile disertifikasi melalui TomEE dan mendukung EJB, CDI, JSF, JPA, dan banyak lagi.
David Blevins
10
@ Davidvidle jadi apa bedanya sekarang?
aldo.roman.nurena
23
@ aldo.roman.nurena Sangat sedikit perbedaan. GlassFish dan JBoss keduanya mendukung Java EE Full Profile, sehingga mereka memiliki dukungan untuk teknologi warisan seperti JAX-RPC dan CORBA. Kami tidak memasukkan ini dalam Tomcat versi Java EE, tetapi semua teknologi saat ini ada seperti JAX-RS, JAX-WS, JMS, CDI, JPA, JSF, EJB, JTA, dll.
David Blevins
@ DavidBlevins Jika kita ingin memilih antara JBoss dan Glassfish, mana yang lebih baik untuk lingkungan produksi? Apakah ada informasi referensi yang tersedia untuk memahami ini?
Sudhakar Chavali
1
Mengedit stackoverflow adalah cara yang tepat untuk memperbaiki jawaban yang melayang jauh dari kenyataan.
Warren P
358

Tomcat hanyalah sebuah server HTTP dan wadah servlet Java. JBoss dan GlassFish adalah server aplikasi Java EE yang lengkap, termasuk wadah EJB dan semua fitur lain dari tumpukan itu. Di sisi lain, Tomcat memiliki jejak memori yang lebih ringan (~ 60-70 MB), sementara server Java EE tersebut berbobot ratusan MB. Tomcat sangat populer untuk aplikasi web sederhana, atau aplikasi yang menggunakan kerangka kerja seperti Spring yang tidak memerlukan server Java EE lengkap. Administrasi server Tomcat bisa dibilang lebih mudah, karena ada bagian bergerak yang lebih sedikit.

Namun, untuk aplikasi yang memerlukan Java EE stack penuh (atau setidaknya lebih banyak potongan yang dapat dengan mudah dibaut ke Tomcat) ... JBoss dan GlassFish adalah dua dari penawaran open source paling populer (yang ketiga adalah Apache Geronimo , di mana versi gratis IBM WebSphere dibangun). JBoss memiliki komunitas pengguna yang lebih besar dan lebih dalam, dan basis kode yang lebih matang. Namun, JBoss jauh tertinggal dari GlassFish dalam mengimplementasikan spesifikasi Java EE saat ini. Juga, bagi mereka yang lebih suka sistem admin berbasis GUI ... Konsol admin GlassFish sangat apik, sedangkan sebagian besar administrasi di JBoss dilakukan dengan command-line dan editor teks. GlassFish datang langsung dari Sun / Oracle, dengan semua keunggulan yang dapat ditawarkan. JBoss TIDAK di bawah kendali Sun / Oracle, dengan semua keunggulan yang dapat ditawarkan.

Steve Perkins
sumber
3
Saya belum memvalidasi, tetapi beberapa mengklaim bahwa untuk proyek reguler, wadah EE 6 mungkin menggunakan memori 25% lebih sedikit daripada Spring + dependensinya.
Arjan
2
+1, jawaban yang sangat baik, meskipun saya berlangganan komentar @ Arjan: sebenarnya memori yang digunakan oleh server ini sendiri tidak begitu penting dibandingkan dengan berapa banyak memori yang dibutuhkan oleh aplikasi yang digunakan (dan ITU sangat bergantung pada teknologi yang digunakan. Musim semi agak of a memory hog)
Shivan Dragon
10
Heh ... diskusi tentang "kontainer servlet" vs. "server JEE" sepertinya selalu berubah menjadi diskusi "Spring" vs. "EJB / JSF". Saya telah menggunakan JEE selama bertahun-tahun, dan saya selalu senang melakukannya ketika klien membayar saya. Namun, pikiran saya adalah: [1] sebagian besar tolok ukur di kedua sisi berasal dari sumber yang bias, saya tidak pernah melihat perbedaan sumber daya yang besar antara kedua tumpukan itu sendiri, [2] Musim semi JAUH lebih portabel daripada "standar" JEE, yang dengannya sepertinya selalu menyakitkan untuk berganti server, dan yang terakhir ...
Steve Perkins
7
... [3] komunitas pengguna untuk Spring dan Hibernate benar-benar jauh lebih kecil dari spesifikasi JEE murni. Jika Anda mengalami masalah dengan Spring dan memposting pertanyaan di StackOverflow, itu akan dibaca oleh ratusan orang dan Anda akan memiliki jawaban yang solid dalam hitungan menit. Ajukan pertanyaan tentang hal-hal JEE, dan itu akan dibaca oleh selusin orang ... dan separuh waktu, satu-satunya jawaban yang Anda dapatkan adalah, "Itu bekerja untuk saya!". Standar JEE selalu tampak seperti mereka terlambat satu hari dan satu dolar, dan saya merasa sangat kesepian ketika saya mengalami masalah dengan mereka dalam aplikasi nyata.
Steve Perkins
1
Ummmm ... Pada tahun lalu, Tomcat hanya 13 MB, GlassFish 53MB, dan JBoss 127 MB. Saya tidak akan mempertimbangkan ratusan server JavaEE (GlassFish dan JBoss) ini. Jika Anda berbicara tentang WebLogic atau WebSphere maka kita berbicara tentang GB. Info ditemukan di zeroturnaround.com/rebellabs/…
j akan
81

Anda harus menggunakan GlassFish untuk aplikasi Java EE enterprise . Beberapa hal yang perlu dipertimbangkan:

Sebuah web Server berarti: permintaan Penanganan HTTP (biasanya dari browser).

Sebuah Servlet kontainer (misalnya Tomcat ) berarti: Ia bisa menangani servlets & JSP.

Sebuah Application Server (misalnya GlassFish ) berarti: * Hal ini dapat mengatur aplikasi Java EE (biasanya baik servlet / JSP dan EJBs).


Tomcat - dijalankan oleh komunitas Apache - Open source dan memiliki dua rasa:

  1. Tomcat - Profil web - ringan yang hanya merupakan wadah servlet dan tidak mendukung fitur Java EE seperti EJB, JMS dll.
  2. Tomcat EE - Ini adalah wadah Java EE bersertifikat, ini mendukung semua teknologi Java EE.

Tidak ada dukungan komersial yang tersedia (hanya dukungan komunitas)

JBoss - Dijalankan oleh RedHat Ini adalah dukungan penuh-tumpukan untuk JavaEE dan ini adalah wadah Java EE bersertifikat. Ini termasuk Tomcat sebagai wadah web secara internal. Ini juga memiliki dua rasa:

  1. Versi komunitas yang disebut Application Server (AS) - ini hanya akan memiliki dukungan komunitas.
  2. Enterprise Application Server (EAP) - Untuk ini, Anda dapat memiliki lisensi berbasis langganan (Ini didasarkan pada jumlah Core yang Anda miliki di server Anda.)

Glassfish - Dijalankan oleh Oracle Ini juga merupakan Java EE Container dengan sertifikat penuh. Ini memiliki wadah web sendiri (bukan Tomcat). Ini berasal dari Oracle sendiri, jadi semua spesifikasi baru akan diuji dan diimplementasikan dengan Glassfish terlebih dahulu. Jadi, selalu itu akan mendukung spek terbaru. Saya tidak mengetahui model dukungannya.

Jaimin Patel
sumber
2
Apakah saya benar mengatakan, bahwa saat ini (kuartal pertama 2018) Glassfish tidak benar-benar memainkan peran besar dalam kenyataan? Bukankah standar JBoss de facto?
Socrates
14

jboss dan glassfish termasuk wadah servlet (seperti tomcat), namun dua server aplikasi (jboss dan glassfish) juga menyediakan wadah kacang (dan beberapa hal lain juga saya bayangkan)

NimChimpsky
sumber
2
Glassfish dapat melakukan apa saja yang bisa dilakukan Tomcat tetapi itu tidak berarti "termasuk" Tomcat. Glassfish memiliki wadah web sendiri.
Martin
5
Untuk lebih jelasnya, "like tomcat" benar, tetapi JBoss sebenarnya menanamkan Tomcat sebagai implementasi container servletnya.
Chucky
@ Beruntung tidak lagi
NimChimpsky
8

JBoss dan Glassfish pada dasarnya penuh Java EE Application Server sedangkan Tomcat hanya merupakan wadah Servlet. Perbedaan utama antara JBoss, Glassfish, tetapi juga WebSphere, WebLogic, dan lain-lain sehubungan dengan Tomcat tetapi juga Jetty, terletak pada fungsionalitas yang ditawarkan server aplikasi lengkap. Ketika Anda memiliki server aplikasi Java EE tumpukan penuh, Anda dapat mengambil manfaat dari semua implementasi vendor pilihan Anda, dan Anda dapat memanfaatkan EJB, JTA, CDI (JAVA EE 6+), JPA, JSF, JSP / Servlet tentu saja dan seterusnya. Dengan Tomcat di sisi lain, Anda hanya dapat memanfaatkan JSP / Servlet. Namun hari ini dengan Kerangka kerja canggih seperti Spring dan Guice, banyak keuntungan utama menggunakan server aplikasi tumpukan penuh dapat dikurangi, dan dengan asumsi salah satu kerangka kerja ini jantan dengan Spring Ecosystem,

Valerio Vaudi
sumber
8

Tampaknya agak mengecewakan untuk menggunakan Tomcat ketika Anda membaca jawaban ini. Namun apa yang paling gagal disebutkan adalah bahwa Anda bisa mendapatkan kasus penggunaan yang identik atau hampir identik dengan kucing jantan tetapi itu mengharuskan Anda untuk menambahkan perpustakaan yang dibutuhkan (melalui Maven atau apa pun termasuk sistem yang Anda gunakan).

Saya telah menjalankan tomcat dengan JPA, EJB dengan upaya konfigurasi yang sangat kecil.

pengguna2130951
sumber
1
@ Marscottina Dalam pengalaman saya, ya. Ini adalah server web yang sangat dapat dikonfigurasi. Saya kira banyak orang yang membangun aplikasi web modern menggunakannya bersamaan dengan Spring / Spring Boot. Dalam semua tahun saya dengan Java saya masih bingung dengan ekosistem (terutama semua hal JEE) karena saya tidak pernah memiliki persyaratan untuk itu. Maka berakhir di sini hari ini :)
jocull
4

JBoss dan Tomcat adalah server aplikasi Java servlet, tetapi JBoss jauh lebih banyak. Perbedaan mendasar antara keduanya adalah bahwa JBoss menyediakan tumpukan Java Enterprise Edition (Java EE) lengkap, termasuk Enterprise JavaBeans dan banyak teknologi lainnya yang berguna bagi pengembang yang bekerja pada aplikasi Java enterprise.

Tomcat jauh lebih terbatas. Salah satu cara untuk memikirkannya adalah bahwa JBoss adalah tumpukan Java EE yang mencakup wadah servlet dan server web, sedangkan Tomcat, sebagian besar, adalah wadah servlet dan server web.

Sederhana
sumber
3

Apache tomcat hanyalah wadah serverlet saja yang tidak mendukung aplikasi Enterprise Java (JEE). JBoss dan Glassfish mendukung aplikasi JEE tetapi Glassfish jauh lebih berat daripada server JBOSS: Referensi Slide

BATMAN_
sumber