Jaka jest różnica między Tomcat, JBoss i Glassfish?

445

Zaczynam patrzeć na Enterprise Java, a książka, którą obserwuję, wspomina, że ​​będzie korzystać z JBoss. Netbeans jest dostarczany z Glassfish. W przeszłości korzystałem z Tomcat.

Jakie są różnice między tymi trzema programami?

samoz
źródło
70
te pytania są „przekleństwem” dla opensource. Czasami jest zbyt wiele wyborów, które robią prawie dokładnie to samo. Dla początkujących może to prowadzić do paraliżu poprzez analizę. Zaćmienie jest dominującym IDE, ale prawie wszystkie książki, które warto kupić, używają netbeans do rozwijania i nauczania. Wykorzystuje Glassfish, gdy widziałem, jak większość firm korzysta z Jboss w prawdziwym życiu. Istnieją krzywe uczenia się dotyczące korzystania z każdego pojemnika i może to być bardzo frustrujące dla początkujących.
user798719,
Teraz JBoss znany jako [WildFly] ( en.wikipedia.org/wiki/WildFly ), a JBoss był firmą opracowaną przez WildFly.
Chaminda Bandara

Odpowiedzi:

516

Tomcat to tylko kontener serwletów, tzn. Implementuje tylko serwlety i specyfikację JSP. Glassfish i JBoss są pełnymi serwerami Java EE (w tym takimi jak EJB, JMS, ...), przy czym Glassfish jest referencyjną implementacją najnowszego stosu Java EE 6, ale JBoss w 2010 roku jeszcze go nie wspierał.

Petar Minchev
źródło
77
Uwaga dla czytelników, JBoss ma teraz pełny profil Java EE 6, taki jak GlassFish. Tomcat jest teraz certyfikowany przez Java EE 6 Web Profile przez TomEE i obsługuje EJB, CDI, JSF, JPA i wiele innych.
David Blevins,
10
@DavidBlevins, więc jakie są teraz różnice?
aldo.roman.nurena
23
@ aldo.roman.nurena Bardzo niewiele różnic. GlassFish i JBoss obsługują pełny profil Java EE, więc obsługują starsze technologie, takie jak JAX-RPC i CORBA. Nie uwzględniliśmy ich w wersji Tomcat Java EE, ale wszystkie obecne technologie są dostępne, takie jak JAX-RS, JAX-WS, JMS, CDI, JPA, JSF, EJB, JTA itp.
David Blevins
@DavidBlevins Jeśli chcemy wybierać między JBoss a Glassfish, co jest lepsze dla środowiska produkcyjnego? Czy dostępne są jakieś informacje referencyjne pozwalające to zrozumieć?
Sudhakar Chavali,
1
Edycja przy stosie przepływu jest właściwym sposobem na naprawienie odpowiedzi, które zbyt daleko odchodzą od rzeczywistości.
Warren P
358

Tomcat to tylko serwer HTTP i kontener serwletów Java. JBoss i GlassFish to pełnowymiarowe serwery aplikacji Java EE, w tym kontener EJB i wszystkie inne funkcje tego stosu. Z drugiej strony Tomcat ma mniejszy rozmiar pamięci (~ 60-70 MB), podczas gdy te serwery Java EE ważą setki megabajtów. Tomcat jest bardzo popularny w prostych aplikacjach internetowych lub aplikacjach wykorzystujących frameworki takie jak Spring, które nie wymagają pełnego serwera Java EE. Administrowanie serwerem Tomcat jest prawdopodobnie łatwiejsze, ponieważ jest mniej części ruchomych.

Jednak w przypadku aplikacji wymagających pełnego stosu Java EE (lub co najmniej większej liczby elementów, które można łatwo przykręcić do Tomcat) ... JBoss i GlassFish to dwie najpopularniejsze oferty open source (trzecia to Apache Geronimo , na którym zbudowana jest darmowa wersja IBM WebSphere). JBoss ma większą i głębszą społeczność użytkowników oraz bardziej dojrzałą bazę kodową. JBoss pozostaje jednak znacznie w tyle za GlassFish we wdrażaniu obecnych specyfikacji Java EE. Również dla tych, którzy wolą system administracyjny oparty na graficznym interfejsie użytkownika ... Konsola administracyjna GlassFish jest wyjątkowo sprytna, podczas gdy większość administracji w JBoss odbywa się za pomocą wiersza poleceń i edytora tekstu. GlassFish pochodzi prosto z Sun / Oracle, ze wszystkimi zaletami, jakie może zaoferować. JBoss NIE jest pod kontrolą Sun / Oracle, ze wszystkimi zaletami, jakie może zaoferować.

Steve Perkins
źródło
3
Nie sprawdziłem poprawności, ale niektórzy twierdzą, że w przypadku zwykłego projektu kontener EE 6 może zużywać o 25% mniej pamięci niż Spring + jego zależności.
Arjan
2
+1, doskonała odpowiedź, choć zgadzam się z komentarzem @ Arjan: tak naprawdę pamięć używana przez te serwery nie jest tak ważna w porównaniu z ilością pamięci, której potrzebuje wdrożona aplikacja (i TO zależy w dużej mierze od zastosowanych technologii. Wiosna jest nieco wieprza pamięci)
Shivan Dragon
10
Heh ... dyskusja o „kontenerach serwletów” vs. „serwerach JEE” zawsze wydaje się zamieniać w dyskusje „Spring” vs. „EJB / JSF”. Używam JEE od lat i zawsze cieszę się, gdy klient mi płaci. Jednak moje myśli są następujące: [1] większość testów porównawczych po obu stronach pochodzi z stronniczych źródeł, nigdy nie zauważyłem dużej różnicy zasobów między tymi dwoma stosami, [2] Wiosna jest DUŻO bardziej przenośna niż „standardy” JEE, z którymi zmiana serwerów zawsze wydaje się bolesna, a na koniec ...
Steve Perkins,
7
... [3] społeczności użytkowników dla Spring i Hibernacja absolutnie przewyższają społeczności o czystych specyfikacjach JEE. Jeśli napotkasz kłopoty ze Springem i opublikujesz pytanie na StackOverflow, zostanie ono przeczytane przez setki osób, a otrzymasz solidną odpowiedź w ciągu kilku minut. Zadaj pytanie na temat JEE, a zostanie przeczytane przez kilkanaście osób ... i w połowie przypadków jedyną odpowiedzią, którą otrzymujesz, jest: „To zadziałało dla mnie!”. Standardy JEE zawsze wydają się spóźnione o jeden dzień i brakuje mi dolara, a ja czuję się bardzo samotny, kiedy mam z nimi kłopoty w prawdziwej aplikacji.
Steve Perkins
1
Ummmm ... W zeszłym roku Tomcat miał tylko 13 MB, GlassFish 53 MB i JBoss 127 MB. Nie uważałbym tych serwerów JavaEE (GlassFish i JBoss) za setki megabajtów. Jeśli mówisz o WebLogic lub WebSphere, to mówimy o GB. Informacje znalezione na zeroturnaround.com/rebellabs/…
j będzie
81

Powinieneś używać GlassFish dla aplikacji korporacyjnych Java EE . Kilka rzeczy do rozważenia:

A Web Server środki: wnioski obchodzenia HTTP (zwykle z przeglądarek).

Serwletów Pojemnik (np Tomcat ) oznacza: można obsługiwać serwletów i JSP.

Application Server (np GlassFish ) oznacza: * To może zarządzać aplikacjami Java EE (zwykle zarówno servlet / JSP i EJB).


Tomcat - jest zarządzany przez społeczność Apache - Open source i ma dwa smaki:

  1. Tomcat - profil internetowy - lekki, który jest tylko kontenerem serwletu i nie obsługuje funkcji Java EE, takich jak EJB, JMS itp.
  2. Tomcat EE - jest to certyfikowany kontener Java EE, który obsługuje wszystkie technologie Java EE.

Brak dostępnego wsparcia komercyjnego (tylko wsparcie społeczności)

JBoss - uruchamiany przez RedHat Jest to obsługa pełnego stosu dla JavaEE i jest to certyfikowany kontener Java EE. Obejmuje to Tomcat jako wewnętrzny pojemnik internetowy. Ma to również dwa smaki:

  1. Wersja społecznościowa o nazwie Application Server (AS) - będzie miała tylko obsługę społeczności.
  2. Enterprise Application Server (EAP) - W tym celu możesz mieć licencję subskrypcyjną (zależy ona od liczby rdzeni na serwerach).

Glassfish - prowadzony przez Oracle Jest to również pełny stos Java EE Container. Ma własny kontener internetowy (nie Tomcat). Pochodzi od samej Oracle, więc wszystkie nowe specyfikacje zostaną najpierw przetestowane i zaimplementowane w Glassfish. Więc zawsze będzie obsługiwał najnowszą specyfikację. Nie znam modeli wsparcia.

Jaimin Patel
źródło
2
Czy mam rację, że obecnie (1 kwartał 2018 r.) Glassfish nie odgrywa tak naprawdę dużej roli w rzeczywistości? Czy nie jest to de facto standardowy JBoss?
Sokrates,
14

jboss i glassfish zawierają kontener serwletu (jak tomcat), jednak dwa serwery aplikacji (jboss i glassfish) również zapewniają pojemnik na fasolę (i kilka innych rzeczy, jak mi się wydaje)

Nim Chimpsky
źródło
2
Glassfish może zrobić wszystko, co potrafi Tomcat, ale to nie znaczy, że „obejmuje” Tomcat. Glassfish ma swój własny pojemnik internetowy.
Martin
5
Aby być bardziej zrozumiałym, „podobny tomcat” ma rację, ale JBoss faktycznie osadza Tomcat jako implementację kontenera serwletu.
Chucky,
@Chucky już nie
NimChimpsky
8

JBoss i Glassfish są zasadniczo pełnym serwerem aplikacji Java EE, podczas gdy Tomcat jest tylko kontenerem serwletu. Główną różnicą między JBoss, Glassfish, ale także WebSphere, WebLogic i tak dalej w odniesieniu do Tomcat, ale także Jetty, była funkcjonalność oferowana przez pełny serwer aplikacji. Gdy masz serwer aplikacji Java EE z pełnym stosem, możesz skorzystać z całej implementacji wybranego przez siebie dostawcy, a także z EJB, JTA, CDI (JAVA EE 6+), JPA, JSF, JSP / Servlet, oczywiście i tak dalej. Z drugiej strony Tomcat możesz korzystać tylko z JSP / Servlet. Jednak w dzisiejszych czasach w zaawansowanym frameworku, takim jak Spring i Guice, wiele głównych zalet korzystania z serwera aplikacji z pełnym stosem można złagodzić, a przy założeniu, że jeden z tych frameworków jest oparty wyłącznie na Spring Ecosystem,

Valerio Vaudi
źródło
8

Korzystanie z Tomcat podczas czytania tych odpowiedzi wydaje się nieco zniechęcające. Jednak najbardziej nie wspomina się o tym, że można uzyskać identyczne lub prawie identyczne przypadki użycia z tomcat, ale wymaga to dodania potrzebnych bibliotek (za pośrednictwem Maven lub dowolnego systemu, z którego korzystasz).

Uruchomiłem tomcat z JPA, EJB przy bardzo małych nakładach konfiguracyjnych.

użytkownik2130951
źródło
1
@MarcoOttina Z mojego doświadczenia wynika, że ​​tak. Jest to wysoce konfigurowalny serwer internetowy. Sądzę, że wiele osób budujących nowoczesne aplikacje internetowe korzysta z niego wraz z Spring / Spring Boot. Przez wszystkie lata związane z Javą wciąż jestem zdezorientowany przez ekosystem (szczególnie wszystkie rzeczy z JEE), ponieważ nigdy nie miałem żadnych wymagań. Tak więc dzisiaj
kończę
4

Zarówno JBoss, jak i Tomcat są serwerami aplikacji serwletów Java, ale JBoss to o wiele więcej. Zasadnicza różnica między nimi polega na tym, że JBoss zapewnia pełny stos Java Enterprise Edition (Java EE), w tym Enterprise JavaBeans i wiele innych technologii, które są przydatne dla programistów pracujących na korporacyjnych aplikacjach Java.

Tomcat jest znacznie bardziej ograniczony. Jednym ze sposobów myślenia o tym jest to, że JBoss to stos Java EE, który zawiera kontener serwletu i serwer WWW, podczas gdy Tomcat, w przeważającej części, to kontener serwletu i serwer WWW.

spartański
źródło
3

Apache tomcat jest tylko kontenerem serwletowym, który nie obsługuje aplikacji Java Enterprise (JEE). JBoss i Glassfish obsługują aplikację JEE, ale Glassfish jest znacznie cięższy niż serwer JBOSS: Slide Slide

ORDYNANS_
źródło