Was ist der Unterschied zwischen Tomcat, JBoss und Glassfish?

445

Ich fange an, mich mit Enterprise Java zu beschäftigen, und in dem Buch, dem ich folge, wird erwähnt, dass es JBoss verwenden wird. Netbeans wird mit Glassfish geliefert. Ich habe Tomcat in der Vergangenheit verwendet.

Was sind die Unterschiede zwischen diesen drei Programmen?

Samoz
quelle
70
Diese Fragen sind der Fluch von Open Source. Es gibt manchmal zu viele Möglichkeiten, die fast genau dasselbe bewirken. Für Neulinge kann es durch Analyse zu Lähmungen kommen. Eclipse ist die dominierende IDE, doch fast alle Bücher, die es wert sind, gekauft zu werden, verwenden Netbeans, um sich zu entwickeln und zu unterrichten. Es verwendet Glassfish, wenn ich gesehen habe, dass die meisten Unternehmen Jboss im wirklichen Leben verwenden. Es gibt Lernkurven für die Verwendung jedes Containers, und es kann für Neulinge sehr frustrierend sein.
user798719
Jetzt war JBoss, bekannt als [WildFly] ( en.wikipedia.org/wiki/WildFly ) und JBoss, das Unternehmen, das WildFly entwickelte.
Chaminda Bandara
Ähnliche Frage: Java EE Web-Profil vs Java EE Full Platform
Basil Bourque

Antworten:

516

Tomcat ist nur ein Servlet-Container, dh es implementiert nur die Servlets und die JSP-Spezifikation. Glassfish und JBoss sind vollständige Java EE-Server (einschließlich EJB, JMS, ...), wobei Glassfish die Referenzimplementierung des neuesten Java EE 6-Stacks ist, aber JBoss im Jahr 2010 hat ihn noch nicht vollständig unterstützt.

Petar Minchev
quelle
77
Hinweis für Leser: JBoss ist jetzt Java EE 6 Full Profile-zertifiziert wie GlassFish. Außerdem ist Tomcat jetzt über TomEE für Java EE 6 Web Profile zertifiziert und unterstützt EJB, CDI, JSF, JPA und mehr.
David Blevins
10
@ DavidBlevins also was sind jetzt die Unterschiede?
aldo.roman.nurena
23
@ aldo.roman.nurena Sehr wenige Unterschiede. GlassFish und JBoss unterstützen beide das Java EE Full Profile, sodass sie ältere Technologien wie JAX-RPC und CORBA unterstützen. Wir haben diese nicht in die Java EE-Version von Tomcat aufgenommen, aber alle aktuellen Technologien wie JAX-RS, JAX-WS, JMS, CDI, JPA, JSF, EJB, JTA usw.
David Blevins
@ DavidBlevins Wenn wir zwischen JBoss und Glassfish wählen möchten, was ist besser für die Produktionsumgebung? Gibt es Referenzinformationen, um dies zu verstehen?
Sudhakar Chavali
1
Das Bearbeiten im Stackoverflow ist der richtige Weg, um Antworten zu korrigieren, die zu weit von der Realität abweichen.
Warren P
358

Tomcat ist lediglich ein HTTP-Server und ein Java-Servlet-Container. JBoss und GlassFish sind vollwertige Java EE-Anwendungsserver, einschließlich eines EJB-Containers und aller anderen Funktionen dieses Stacks. Auf der anderen Seite hat Tomcat einen geringeren Speicherbedarf (~ 60-70 MB), während diese Java EE-Server Hunderte von Megabyte wiegen. Tomcat ist sehr beliebt für einfache Webanwendungen oder Anwendungen mit Frameworks wie Spring, für die kein vollständiger Java EE-Server erforderlich ist. Die Verwaltung eines Tomcat-Servers ist wohl einfacher, da weniger bewegliche Teile vorhanden sind.

Für Anwendungen, die einen vollständigen Java EE-Stack erfordern (oder zumindest mehr Teile, die leicht an Tomcat angeschraubt werden können) ... JBoss und GlassFish sind zwei der beliebtesten Open Source-Angebote (das dritte ist Apache Geronimo , auf dem die kostenlose Version von IBM WebSphere basiert). JBoss hat eine größere und tiefere Benutzergemeinschaft und eine ausgereiftere Codebasis. JBoss bleibt jedoch bei der Implementierung der aktuellen Java EE-Spezifikationen deutlich hinter GlassFish zurück. Auch für diejenigen, die ein GUI-basiertes Admin-System bevorzugen ... Die Admin-Konsole von GlassFish ist extrem übersichtlich, während die meiste Verwaltung in JBoss über eine Befehlszeile und einen Texteditor erfolgt. GlassFish kommt direkt von Sun / Oracle und bietet alle Vorteile, die es bieten kann. JBoss steht NICHT unter der Kontrolle von Sun / Oracle, mit all den Vorteilen, die DAS bieten kann.

Steve Perkins
quelle
3
Ich habe nicht validiert, aber einige behaupten, dass ein EE 6-Container für ein reguläres Projekt 25% weniger Speicher benötigt als Spring + seine Abhängigkeiten.
Arjan
2
+1, ausgezeichnete Antwort, obwohl ich den Kommentar von @ Arjan abonniere: Eigentlich ist der von diesen Servern selbst verwendete Speicher nicht so wichtig im Vergleich dazu, wie viel Speicher eine bereitgestellte Anwendung benötigt (und DAS hängt stark von den verwendeten Technologien ab. Spring ist etwas eines Erinnerungsschweins)
Shivan Dragon
10
Heh ... die Diskussion von "Servlet-Containern" gegen "JEE-Server" scheint immer zu Diskussionen über "Spring" gegen "EJB / JSF" zu werden. Ich benutze JEE seit Jahren und bin immer gerne bereit, wenn ein Kunde mich bezahlt. Meine Gedanken sind jedoch: [1] Die meisten Benchmarks auf beiden Seiten stammen aus voreingenommenen Quellen. Ich habe selbst nie einen großen Ressourcenunterschied zwischen den beiden Stapeln bemerkt. [2] Spring ist VIEL tragbarer als JEE- "Standards", mit denen Es scheint immer schmerzhaft, den Server zu wechseln, und nicht zuletzt ...
Steve Perkins
7
... [3] Die Benutzergemeinschaften für Spring und Hibernate stellen die reinen JEE-Spezifikationen absolut in den Schatten. Wenn Sie Probleme mit Spring haben und eine Frage auf StackOverflow stellen, wird diese von Hunderten von Personen gelesen und Sie erhalten innerhalb von Minuten eine solide Antwort. Wenn Sie eine Frage zu JEE-Inhalten stellen, wird diese von einem Dutzend Personen gelesen. In der Hälfte der Fälle erhalten Sie nur die Antwort: "Es hat bei mir funktioniert!". Die JEE-Standards scheinen immer einen Tag zu spät und einen Dollar zu kurz zu sein, und ich fühle mich sehr einsam, wenn ich in einer echten App auf Probleme mit ihnen stoße.
Steve Perkins
1
Ummmm ... Im letzten Jahr war Tomcat nur 13 MB, GlassFish 53 MB und JBoss 127 MB groß. Ich würde diese JavaEE-Server (GlassFish und JBoss) nicht als Hunderte von Megabyte betrachten. Wenn Sie über WebLogic oder WebSphere sprechen, sprechen wir über ein GB. Info gefunden bei zeroturnaround.com/rebellabs/…
j wird
81

Sie sollten GlassFish für Java EE-Unternehmensanwendungen verwenden . Einige Dinge zu beachten:

Ein Webserver bedeutet: Verarbeitung von HTTP-Anforderungen (normalerweise von Browsern).

Ein Servlet-Container (z. B. Tomcat ) bedeutet: Er kann Servlets und JSP verarbeiten.

Ein Anwendungsserver (z. B. GlassFish ) bedeutet: * Er kann Java EE-Anwendungen verwalten (normalerweise sowohl Servlet / JSP als auch EJBs).


Tomcat - wird von der Apache-Community betrieben - Open Source und hat zwei Varianten:

  1. Tomcat - Webprofil - Leichtgewicht, das nur Servlet-Container ist und keine Java EE-Funktionen wie EJB, JMS usw. unterstützt.
  2. Tomcat EE - Dies ist ein zertifizierter Java EE-Container, der alle Java EE-Technologien unterstützt.

Keine kommerzielle Unterstützung verfügbar (nur Community-Unterstützung)

JBoss - Run by RedHat Dies ist eine Full-Stack-Unterstützung für JavaEE und ein zertifizierter Java EE-Container. Dies schließt Tomcat intern als Webcontainer ein. Dies hat auch zwei Geschmacksrichtungen:

  1. Community-Version namens Application Server (AS) - Dies wird nur von der Community unterstützt.
  2. Enterprise Application Server (EAP) - Hierfür können Sie eine abonnementbasierte Lizenz erwerben (diese basiert auf der Anzahl der Kerne, die Sie auf Ihren Servern haben.)

Glassfish - Run by Oracle Dies ist auch ein Full-Stack-zertifizierter Java EE Container. Dies hat einen eigenen Webcontainer (nicht Tomcat). Dies kommt von Oracle selbst, daher werden alle neuen Spezifikationen zuerst mit Glassfish getestet und implementiert. Es würde also immer die neueste Spezifikation unterstützen. Mir sind die Unterstützungsmodelle nicht bekannt.

Jaimin Patel
quelle
2
Kann ich zu Recht sagen, dass Glassfish heutzutage (1. Quartal 2018) in der Realität keine große Rolle spielt? Ist das nicht de facto Standard JBoss?
Sokrates
14

jboss und glassfish enthalten einen Servlet-Container (wie Tomcat), aber die beiden Anwendungsserver (jboss und glassfish) bieten auch einen Bean-Container (und ein paar andere Dinge, die ich mir auch vorstelle).

NimChimpsky
quelle
2
Glassfish kann alles, was Tomcat kann, aber das bedeutet nicht, dass es Tomcat "einschließt". Glassfish hat einen eigenen Webcontainer.
Martin
5
Um es klarer zu machen, das "Like Tomcat" ist richtig, aber JBoss bettet Tomcat tatsächlich für die Implementierung als Servlet-Container ein.
Chucky
@ Glück nicht mehr
NimChimpsky
8

JBoss und Glassfish sind im Grunde genommen vollständige Java EE Application Server, während Tomcat nur ein Servlet-Container ist. Der Hauptunterschied zwischen JBoss, Glassfish, aber auch WebSphere, WebLogic usw. in Bezug auf Tomcat, aber auch Jetty, bestand in der Funktionalität, die ein vollständiger App-Server bietet. Wenn Sie einen Java EE-App-Server mit vollem Stapel hatten, können Sie von der gesamten Implementierung des Anbieters Ihrer Wahl profitieren, und Sie können natürlich von EJB, JTA, CDI (JAVA EE 6+), JPA, JSF, JSP / Servlet profitieren und so weiter. Mit Tomcat hingegen können Sie nur von JSP / Servlet profitieren. Mit fortschrittlichen Frameworks wie Spring und Guice können jedoch viele der Hauptvorteile der Verwendung eines Full-Stack-Anwendungsservers gemindert werden, und unter der Annahme, dass eines dieser Frameworks mit Spring Ecosystem identisch ist,

Valerio Vaudi
quelle
8

Es scheint ein bisschen entmutigend, Tomcat zu verwenden, wenn Sie diese Antworten lesen. Was die meisten jedoch nicht erwähnen, ist, dass Sie mit Tomcat zu identischen oder nahezu identischen Anwendungsfällen gelangen können. Dazu müssen Sie jedoch die erforderlichen Bibliotheken hinzufügen (über Maven oder ein anderes von Ihnen verwendetes Include-System).

Ich habe Tomcat mit JPA, EJBs mit sehr geringem Konfigurationsaufwand ausgeführt.

user2130951
quelle
1
@ MarcoOttina Nach meiner Erfahrung ja. Es ist ein hoch konfigurierbarer Webserver. Ich würde vermuten, dass viele Leute, die moderne Web-Apps erstellen, diese neben Spring / Spring Boot verwenden. In all meinen Jahren mit Java bin ich immer noch verwirrt vom Ökosystem (insbesondere von all dem JEE-Zeug), da ich nie eine Anforderung dafür hatte. Daher landen
wir
4

Sowohl JBoss als auch Tomcat sind Java-Servlet-Anwendungsserver, aber JBoss ist noch viel mehr. Der wesentliche Unterschied zwischen beiden besteht darin, dass JBoss einen vollständigen Java Enterprise Edition-Stack (Java EE) bereitstellt, einschließlich Enterprise JavaBeans und vieler anderer Technologien, die für Entwickler nützlich sind, die an Java-Unternehmensanwendungen arbeiten.

Tomcat ist viel begrenzter. Eine Möglichkeit ist, dass JBoss ein Java EE-Stack ist, der einen Servlet-Container und einen Webserver enthält, während Tomcat größtenteils ein Servlet-Container und ein Webserver ist.

spartanisch
quelle
3

Apache Tomcat ist nur ein einziger Serverlet-Container, der für Enterprise Java-Anwendungen (JEE) nicht unterstützt wird. JBoss und Glassfish unterstützen JEE-Anwendungen, aber Glassfish ist viel schwerer als der JBOSS-Server: Referenzfolie

BATMAN_
quelle