Quelle est la différence entre Tomcat, JBoss et Glassfish?

445

Je commence à me pencher sur Enterprise Java et le livre que je suis en train de suivre mentionne qu'il utilisera JBoss. Netbeans est livré avec Glassfish. J'ai utilisé Tomcat dans le passé.

Quelles sont les différences entre ces trois programmes?

samoz
la source
70
ces questions sont la «malédiction» de l'open source. Il y a parfois trop de choix qui font presque exactement la même chose. Pour les débutants, cela peut conduire à une paralysie par analyse. Eclipse est l'IDE dominant, mais presque tous les livres qui valent la peine d'être achetés utilisent des netbeans pour se développer et enseigner. Il utilise Glassfish quand j'ai vu la plupart des entreprises utiliser Jboss dans la vraie vie. Il existe des courbes d'apprentissage pour utiliser chaque conteneur, et cela peut être très frustrant pour les débutants.
user798719
Maintenant JBoss connu sous le nom de [WildFly] ( en.wikipedia.org/wiki/WildFly ) et JBoss était la société développée WildFly.
Chaminda Bandara
Question similaire: Profil Web Java EE vs Plateforme complète Java EE
Basil Bourque

Réponses:

516

Tomcat n'est qu'un conteneur de servlets, c'est-à-dire qu'il implémente uniquement les servlets et la spécification JSP. Glassfish et JBoss sont des serveurs Java EE complets (y compris des trucs comme EJB, JMS, ...), Glassfish étant l'implémentation de référence de la dernière pile Java EE 6, mais JBoss en 2010 ne la supportait pas encore complètement.

Petar Minchev
la source
77
Note aux lecteurs, JBoss est désormais certifié Java EE 6 Full Profile comme GlassFish. De plus, Tomcat est désormais certifié Java EE 6 Web Profile via TomEE et prend en charge EJB, CDI, JSF, JPA, etc.
David Blevins
10
@DavidBlevins alors quelles sont maintenant les différences?
aldo.roman.nurena
23
@ aldo.roman.nurena Très peu de différences. GlassFish et JBoss prennent tous deux en charge le profil complet Java EE, ils prennent donc en charge les technologies héritées comme JAX-RPC et CORBA. Nous ne les avons pas inclus dans la version Java EE de Tomcat, mais toutes les technologies actuelles sont là comme JAX-RS, JAX-WS, JMS, CDI, JPA, JSF, EJB, JTA, etc.
David Blevins
@DavidBlevins Si nous voulons choisir entre JBoss et Glassfish, quel est le meilleur pour l'environnement de production? Y a-t-il des informations de référence disponibles pour comprendre cela?
Sudhakar Chavali
1
L'édition sur stackoverflow est la bonne façon de corriger les réponses qui dérivent trop loin de la réalité.
Warren P
358

Tomcat est simplement un serveur HTTP et un conteneur de servlet Java. JBoss et GlassFish sont des serveurs d'applications Java EE à part entière, y compris un conteneur EJB et toutes les autres fonctionnalités de cette pile. D'un autre côté, Tomcat a une empreinte mémoire plus légère (~ 60-70 Mo), tandis que ces serveurs Java EE pèsent des centaines de mégaoctets. Tomcat est très populaire pour les applications Web simples ou les applications utilisant des frameworks tels que Spring qui ne nécessitent pas de serveur Java EE complet. L'administration d'un serveur Tomcat est sans doute plus facile, car il y a moins de pièces mobiles.

Cependant, pour les applications qui nécessitent une pile Java EE complète (ou au moins plus de pièces qui pourraient facilement être boulonnées sur Tomcat) ... JBoss et GlassFish sont deux des offres open source les plus populaires (la troisième est Apache Geronimo , sur lequel la version gratuite d'IBM WebSphere est construite). JBoss a une communauté d'utilisateurs plus grande et plus profonde, et une base de code plus mature. Cependant, JBoss est loin derrière GlassFish dans la mise en œuvre des spécifications Java EE actuelles. De plus, pour ceux qui préfèrent un système d'administration basé sur une interface graphique ... La console d'administration de GlassFish est extrêmement simple, alors que la plupart des tâches d'administration dans JBoss se font avec une ligne de commande et un éditeur de texte. GlassFish vient directement de Sun / Oracle, avec tous les avantages que cela peut offrir. JBoss n'est PAS sous le contrôle de Sun / Oracle, avec tous les avantages QUI peuvent offrir.

Steve Perkins
la source
3
Je n'ai pas validé, mais certains prétendent que pour un projet normal, un conteneur EE 6 pourrait utiliser 25% de mémoire en moins que Spring + ses dépendances.
Arjan
2
+1, excellente réponse, même si je souscris au commentaire de @ Arjan: en réalité, la mémoire utilisée par ces serveurs eux-mêmes n'est pas si importante par rapport à la quantité de mémoire dont une application déployée aura besoin (et cela dépend fortement des technologies utilisées. Le printemps est quelque peu d'un porc de mémoire)
Shivan Dragon
10
Hé ... la discussion entre "conteneurs de servlets" et "serveurs JEE" semble toujours se transformer en discussions entre "Spring" et "EJB / JSF". J'utilise JEE depuis des années et je suis toujours heureux de le faire lorsqu'un client me paie. Cependant, mes pensées sont: [1] la plupart des repères des deux côtés proviennent de sources biaisées, je n'ai jamais remarqué une grande différence de ressources entre les deux piles moi-même, [2] Spring est BEAUCOUP plus portable que les "standards" JEE, avec lesquels il semble toujours pénible de changer de serveur, et enfin et surtout ...
Steve Perkins
7
... [3] les communautés d'utilisateurs de Spring et Hibernate sont absolument inférieures à celles des spécifications JEE pures. Si vous rencontrez des problèmes avec Spring et postez une question sur StackOverflow, elle sera lue par des centaines de personnes et vous aurez une réponse solide en quelques minutes. Posez une question sur les trucs JEE, et elle sera lue par une douzaine de personnes ... et la moitié du temps, la seule réponse que vous obtenez est "Ça a marché pour moi!". Les normes JEE semblent toujours être en retard d'un jour et à court de dollar, et je me sens très seul quand je rencontre des problèmes avec elles dans une vraie application.
Steve Perkins
1
Ummmm ... L'année dernière, Tomcat n'avait que 13 Mo, GlassFish 53 Mo et JBoss 127 Mo. Je ne considérerais pas ces serveurs JavaEE (GlassFish et JBoss) comme des centaines de megs. Si vous parlez de WebLogic ou WebSphere, nous parlons alors d'un Go. Infos trouvées sur zeroturnaround.com/rebellabs/…
j le
81

Vous devez utiliser GlassFish pour les applications d'entreprise Java EE . Quelques points à considérer:

Un serveur Web signifie: gérer les requêtes HTTP (généralement à partir de navigateurs).

Un conteneur de servlets (par exemple Tomcat ) signifie: Il peut gérer les servlets et JSP.

Un serveur d'applications (par exemple GlassFish ) signifie: * Il peut gérer les applications Java EE (généralement à la fois servlet / JSP et EJB).


Tomcat - est géré par la communauté Apache - Open source et a deux saveurs:

  1. Tomcat - Profil Web - léger qui n'est qu'un conteneur de servlet et ne prend pas en charge les fonctionnalités Java EE comme EJB, JMS, etc.
  2. Tomcat EE - Il s'agit d'un conteneur Java EE certifié, il prend en charge toutes les technologies Java EE.

Aucun support commercial disponible (uniquement support communautaire)

JBoss - géré par RedHat Il s'agit d'un support de pile complète pour JavaEE et il s'agit d'un conteneur Java EE certifié. Cela inclut Tomcat en tant que conteneur Web en interne. Cela a également deux saveurs:

  1. Version communautaire appelée Application Server (AS) - elle ne bénéficiera que du support communautaire.
  2. Enterprise Application Server (EAP) - Pour cela, vous pouvez avoir une licence par abonnement (elle est basée sur le nombre de cœurs que vous avez sur vos serveurs.)

Glassfish - Run by Oracle Il s'agit également d'un conteneur Java EE certifié à pile complète. Celui-ci possède son propre conteneur Web (pas Tomcat). Cela vient d'Oracle lui-même, donc toutes les nouvelles spécifications seront d'abord testées et mises en œuvre avec Glassfish. Ainsi, il prendrait toujours en charge les dernières spécifications. Je ne connais pas ses modèles de support.

Jaimin Patel
la source
2
Ai-je raison de dire qu'aujourd'hui (1er trimestre 2018) Glassfish ne joue pas vraiment un grand rôle dans la réalité? N'est-ce pas le standard de facto JBoss?
Socrates
14

jboss et glassfish incluent un conteneur de servlet (comme tomcat), mais les deux serveurs d'applications (jboss et glassfish) fournissent également un conteneur de bean (et quelques autres choses aussi j'imagine)

NimChimpsky
la source
2
Glassfish peut faire tout ce que Tomcat peut faire, mais cela ne signifie pas qu'il "inclut" Tomcat. Glassfish a son propre conteneur Web.
Martin
5
Pour être plus clair, le "like tomcat" a raison, mais JBoss incorpore en fait Tomcat pour le en tant que son implémentation de conteneur de servlet.
Chucky
@Chucky n'est plus
NimChimpsky
8

JBoss et Glassfish sont essentiellement des serveurs d'applications Java EE complets, tandis que Tomcat n'est qu'un conteneur de servlets. La principale différence entre JBoss, Glassfish mais aussi WebSphere, WebLogic et ainsi de suite par rapport à Tomcat mais aussi Jetty, réside dans les fonctionnalités qu'offre un serveur d'application complet. Lorsque vous disposiez d'un serveur d'application Java EE à pile complète, vous pouvez bénéficier de toute l'implémentation du fournisseur de votre choix, et vous pouvez bénéficier d'EJB, JTA, CDI (JAVA EE 6+), JPA, JSF, JSP / Servlet bien sûr etc. Avec Tomcat d'autre part, vous ne pouvez bénéficier que de JSP / Servlet. Cependant, aujourd'hui, avec un framework avancé tel que Spring et Guice, bon nombre des principaux avantages de l'utilisation d'un serveur d'applications à pile complète peuvent être atténués, et avec l'hypothèse d'un de ces frameworks viril avec Spring Ecosystem,

Valerio Vaudi
la source
8

Il semble un peu décourageant d'utiliser Tomcat lorsque vous lisez ces réponses. Cependant, ce que la plupart ne mentionnent pas, c'est que vous pouvez obtenir des cas d'utilisation identiques ou presque identiques avec tomcat, mais cela vous oblige à ajouter les bibliothèques nécessaires (via Maven ou tout autre système d'inclusion que vous utilisez).

J'ai exécuté tomcat avec JPA, EJB avec de très petits efforts de configuration.

user2130951
la source
1
@MarcoOttina D'après mon expérience, oui. Il s'agit d'un serveur Web hautement configurable. Je suppose que beaucoup de gens qui créent des applications Web modernes l'utilisent aux côtés de Spring / Spring Boot. Pendant toutes mes années avec Java, je suis toujours confus par l'écosystème (en particulier tous les trucs JEE), car je n'en ai jamais eu besoin. Donc finissant ici aujourd'hui :)
jocull
4

JBoss et Tomcat sont tous deux des serveurs d'applications de servlet Java, mais JBoss est beaucoup plus. La différence substantielle entre les deux est que JBoss fournit une pile Java Enterprise Edition (Java EE) complète, y compris Enterprise JavaBeans et de nombreuses autres technologies utiles aux développeurs travaillant sur des applications Java d'entreprise.

Tomcat est beaucoup plus limité. Une façon de penser est que JBoss est une pile Java EE qui comprend un conteneur de servlets et un serveur Web, tandis que Tomcat, pour la plupart, est un conteneur de servlets et un serveur Web.

spartiate
la source
3

Apache tomcat est juste un seul conteneur de serverlet qu'il ne prend pas en charge pour l'application Java d'entreprise (JEE). JBoss et Glassfish prennent en charge l'application JEE mais Glassfish bien plus lourd que le serveur JBOSS: Référence Slide

HOMME CHAUVE-SOURIS_
la source