¿Cuál es la diferencia entre Tomcat, JBoss y Glassfish?

445

Estoy empezando a analizar Enterprise Java y el libro que sigo menciona que usará JBoss. Netbeans se envía con Glassfish. He usado Tomcat en el pasado.

¿Cuáles son las diferencias entre estos tres programas?

Samoz
fuente
70
Estas preguntas son la 'maldición' del código abierto. A veces hay demasiadas opciones que hacen casi exactamente lo mismo. Para los novatos, puede conducir a la parálisis por análisis. Eclipse es el IDE dominante, sin embargo, casi todos los libros que valen la pena comprar utilizan netbeans para desarrollar y enseñar. Utiliza Glassfish cuando he visto que la mayoría de las empresas usan Jboss en la vida real. Hay curvas de aprendizaje para usar cada contenedor, y puede ser muy frustrante para los novatos.
user798719
Ahora JBoss conocido como [WildFly] ( en.wikipedia.org/wiki/WildFly ) y JBoss fue la compañía que desarrolló WildFly.
Chaminda Bandara
Pregunta similar: Java EE Perfil web vs Java EE Full Platform
Basil Bourque

Respuestas:

516

Tomcat es solo un contenedor de servlets, es decir, implementa solo los servlets y la especificación JSP. Glassfish y JBoss son servidores completos de Java EE (que incluyen cosas como EJB, JMS, ...), siendo Glassfish la implementación de referencia de la última pila Java EE 6, pero JBoss en 2010 todavía no era totalmente compatible.

Petar Minchev
fuente
77
Nota para los lectores, JBoss ahora cuenta con la certificación Java EE 6 Full Profile como GlassFish. Además, Tomcat ahora está certificado por Java EE 6 Web Profile a través de TomEE y es compatible con EJB, CDI, JSF, JPA y más.
David Blevins
10
@DavidBlevins, ¿cuáles son ahora las diferencias?
aldo.roman.nurena
23
@ aldo.roman.nurena Muy pocas diferencias. GlassFish y JBoss son compatibles con el perfil completo de Java EE, por lo que tienen soporte para tecnologías heredadas como JAX-RPC y CORBA. No incluimos estos en la versión Java EE de Tomcat, pero toda la tecnología actual está allí como JAX-RS, JAX-WS, JMS, CDI, JPA, JSF, EJB, JTA, etc.
David Blevins
@DavidBlevins Si queremos elegir entre JBoss y Glassfish, ¿cuál es mejor para el entorno de producción? ¿Hay alguna información de referencia disponible para entender esto?
Sudhakar Chavali
1
La edición en stackoverflow es la forma correcta de corregir las respuestas que se alejan demasiado de la realidad.
Warren P
358

Tomcat es simplemente un servidor HTTP y un contenedor de servlet Java. JBoss y GlassFish son servidores de aplicaciones Java EE completos, que incluyen un contenedor EJB y todas las demás características de esa pila. Por otro lado, Tomcat tiene una huella de memoria más ligera (~ 60-70 MB), mientras que esos servidores Java EE pesan cientos de megas. Tomcat es muy popular para aplicaciones web simples o aplicaciones que usan frameworks como Spring que no requieren un servidor Java EE completo. La administración de un servidor Tomcat es posiblemente más fácil, ya que hay menos partes móviles.

Sin embargo, para las aplicaciones que requieren una pila completa de Java EE (o al menos más piezas que se puedan atornillar fácilmente a Tomcat) ... JBoss y GlassFish son dos de las ofertas de código abierto más populares (la tercera es Apache Geronimo , sobre el cual se construye la versión gratuita de IBM WebSphere). JBoss tiene una comunidad de usuarios más grande y profunda, y una base de código más madura. Sin embargo, JBoss va muy por detrás de GlassFish en la implementación de las especificaciones actuales de Java EE. Además, para aquellos que prefieren un sistema de administración basado en GUI ... La consola de administración de GlassFish es extremadamente elegante, mientras que la mayoría de la administración en JBoss se realiza con una línea de comandos y un editor de texto. GlassFish viene directamente de Sun / Oracle, con todas las ventajas que puede ofrecer. JBoss NO está bajo el control de Sun / Oracle, con todas las ventajas que ESO puede ofrecer.

Steve Perkins
fuente
3
No lo he validado, pero algunos afirman que para un proyecto normal, un contenedor EE 6 podría usar un 25% menos de memoria que Spring + sus dependencias.
Arjan
2
+1, excelente respuesta, aunque me suscribo al comentario de @ Arjan: realmente la memoria utilizada por estos servidores no es tan importante en comparación con la cantidad de memoria que necesitará una aplicación implementada (y ESO depende en gran medida de las tecnologías utilizadas. Spring es algo de un cerdo de memoria)
Shivan Dragon
10
Je ... la discusión de "contenedores de servlets" vs. "servidores JEE" siempre parece convertirse en discusiones de "Spring" vs. "EJB / JSF". He usado JEE durante años, y siempre estoy feliz de hacerlo cuando un cliente me paga. Sin embargo, mis pensamientos son: [1] la mayoría de los puntos de referencia en ambos lados provienen de fuentes sesgadas, nunca he notado una gran diferencia de recursos entre las dos pilas, [2] Spring es MUCHO más portátil que los "estándares" JEE, con los cuales siempre parece doloroso cambiar de servidor, y por último, pero no menos importante ...
Steve Perkins
77
... [3] las comunidades de usuarios de Spring e Hibernate eclipsan absolutamente las de las especificaciones JEE puras. Si tiene problemas con Spring y publica una pregunta en StackOverflow, cientos de personas la leerán y obtendrá una respuesta sólida en minutos. Haga una pregunta sobre cosas de JEE, y será leída por una docena de personas ... y la mitad del tiempo, la única respuesta que obtiene es: "¡Funcionó para mí!". Los estándares JEE siempre parecen retrasarse un día y faltan un dólar, y me siento muy solo cuando tengo problemas con ellos en una aplicación real.
Steve Perkins,
1
Ummmm ... A partir del año pasado, Tomcat tenía solo 13 MB, GlassFish 53MB y JBoss 127 MB. No consideraría esos servidores JavaEE (GlassFish y JBoss) cientos de megas. Si está hablando de WebLogic o WebSphere, estamos hablando de un GB. Información encontrada en zeroturnaround.com/rebellabs/…
j será el
81

Debe usar GlassFish para aplicaciones empresariales Java EE . Algunas cosas a considerar:

Un servidor web significa: Manejo de solicitudes HTTP (generalmente desde navegadores).

Un contenedor de servlets (por ejemplo, Tomcat ) significa: puede manejar servlets y JSP.

Un servidor de aplicaciones (por ejemplo, GlassFish ) significa: * Puede gestionar aplicaciones Java EE (generalmente tanto servlet / JSP como EJB).


Tomcat - está dirigido por la comunidad Apache - Código abierto y tiene dos sabores:

  1. Tomcat: perfil web : ligero, que solo es un contenedor de servlets y no admite funciones Java EE como EJB, JMS, etc.
  2. Tomcat EE : este es un contenedor certificado de Java EE, es compatible con todas las tecnologías Java EE.

No hay soporte comercial disponible (solo soporte comunitario)

JBoss - Ejecutado por RedHat Este es un soporte completo para JavaEE y es un contenedor Java EE certificado. Esto incluye a Tomcat como contenedor web internamente. Esto también tiene dos sabores:

  1. Versión de la comunidad llamada Application Server (AS) : esto solo tendrá soporte de la comunidad.
  2. Enterprise Application Server (EAP) : para esto, puede tener una licencia basada en suscripción (se basa en la cantidad de núcleos que tiene en sus servidores).

Glassfish - Ejecutado por Oracle Este es también un contenedor Java EE certificado de pila completa. Esto tiene su propio contenedor web (no Tomcat). Esto proviene del propio Oracle, por lo que todas las nuevas especificaciones se probarán e implementarán primero con Glassfish. Por lo tanto, siempre sería compatible con la última especificación. No conozco sus modelos de soporte.

Jaimin Patel
fuente
2
¿Tengo razón en decir que hoy en día (primer trimestre de 2018) Glassfish realmente no juega un papel importante en la realidad? ¿No es el JBoss estándar de facto?
Sócrates
14

jboss y glassfish incluyen un contenedor de servlet (como tomcat), sin embargo, los dos servidores de aplicaciones (jboss y glassfish) también proporcionan un contenedor de beans (y algunas otras cosas también imagino)

NimChimpsky
fuente
2
Glassfish puede hacer cualquier cosa que Tomcat pueda hacer, pero eso no significa que "incluya" a Tomcat. Glassfish tiene su propio contenedor web.
Martin
55
Para ser más claro, el "like tomcat" es correcto, pero JBoss realmente incorpora Tomcat para su implementación de contenedor de servlet.
Chucky
@Chucky ya no
NimChimpsky
8

JBoss y Glassfish son básicamente un servidor de aplicaciones Java EE completo, mientras que Tomcat es solo un contenedor de Servlet. La principal diferencia entre JBoss, Glassfish, pero también WebSphere, WebLogic, etc. con respecto a Tomcat pero también Jetty, estaba en la funcionalidad que ofrece un servidor de aplicaciones completo. Cuando tenía un servidor de aplicaciones Java EE de pila completa, puede beneficiarse de toda la implementación del proveedor de su elección, y puede beneficiarse de EJB, JTA, CDI (JAVA EE 6+), JPA, JSF, JSP / Servlet, por supuesto. y así. Con Tomcat, por otro lado, solo puede beneficiarse de JSP / Servlet. Sin embargo, a día de hoy con un marco avanzado como Spring y Guice, muchas de las principales ventajas de usar un servidor de aplicaciones de pila completa pueden mitigarse, y con la suposición de uno de estos marcos varonil con Spring Ecosystem,

Valerio Vaudi
fuente
8

Parece un poco desalentador usar Tomcat cuando lee estas respuestas. Sin embargo, lo que la mayoría no menciona es que puede obtener casos de uso idénticos o casi idénticos con tomcat, pero eso requiere que agregue las bibliotecas necesarias (a través de Maven o cualquier sistema de inclusión que use).

He estado ejecutando tomcat con JPA, EJB con esfuerzos de configuración muy pequeños.

usuario2130951
fuente
1
@MarcoOttina En mi experiencia, sí. Es un servidor web altamente configurable. Supongo que muchas personas que crean aplicaciones web modernas lo están utilizando junto con Spring / Spring Boot. En todos mis años con Java todavía estoy confundido por el ecosistema (particularmente todas las cosas de JEE) ya que nunca he tenido ningún requisito para ello. Por lo tanto, termina aquí hoy :)
jocull
4

Tanto JBoss como Tomcat son servidores de aplicaciones de servlet Java, pero JBoss es mucho más. La diferencia sustancial entre los dos es que JBoss proporciona una pila completa de Java Enterprise Edition (Java EE), que incluye Enterprise JavaBeans y muchas otras tecnologías que son útiles para los desarrolladores que trabajan en aplicaciones Java empresariales.

Tomcat es mucho más limitado. Una forma de pensarlo es que JBoss es una pila Java EE que incluye un contenedor de servlets y un servidor web, mientras que Tomcat, en su mayor parte, es un contenedor de servlets y un servidor web.

espartano
fuente
3

Apache tomcat es solo un único contenedor de servidor que no es compatible con la aplicación Enterprise Java (JEE). JBoss y Glassfish son compatibles con la aplicación JEE, pero Glassfish es mucho más pesado que el servidor JBOSS: Diapositiva de referencia

HOMBRE MURCIÉLAGO_
fuente