¿Es Apache Tomcat realmente suficientes aplicaciones web Java? [cerrado]

Me encontré con este artículo: Deje de gastar dinero en servidores de aplicaciones WebLogic, WebSphere y JBoss a través de un tweet hoy.

El artículo comienza con

No entiendo por qué las empresas gastan millones de dólares en servidores de aplicaciones Java como Oracle Weblogic o IBM WebSphere Application Server. Entiendo por qué las empresas gastan dinero en Red Hat JBoss: quieren gastar menos en servidores de aplicaciones. Pero, ¿por qué gastar nada en absoluto? Apache Tomcat satisfará los requisitos de implementación de la mayoría de las aplicaciones web Java.

y continúa dando algunas razones por las que:

  • Necesita un contenedor de aplicaciones que admita EJB.
  • Los servidores de aplicaciones optimizados optimizan el hardware
  • El compromiso de dos fases es serio
  • Manejabilidad
  • La agrupación en clústeres admite escalabilidad, rendimiento y disponibilidad

Amo a Tomcat y lo he desarrollado, así que estaré feliz si todo esto es cierto. Sin embargo, no veo muchas razones convincentes por las que no necesite ningún otro servidor de aplicaciones.

Entonces, mi pregunta es: en qué situaciones cree que necesita un (así llamado) avanzado servidor como Weblogic / Websphere / JBoss. ¿Existe algún caso de negocio para Websphere / Weblogic / JBoss, o debería hacerlo Tomcat casi siempre?

Hay algo esencial que Tomcat no puede / no puede proporcionar?

preguntado el 27 de agosto de 11 a las 14:08

Esa publicación de blog parece pasar por alto el hecho de que JBoss se puede obtener a costo cero. -

Ésa es una de las razones por las que no estoy convencido. Para mí, esta publicación suena de alguna manera a marketing para Tomcat, pero no sé por qué, y si mi intuición es correcta.

¿Alguna razón para las votaciones cercanas? -

Porque tal como está redactado, esta es una pregunta bastante subjetiva y abierta. -

@Nivas, supongo que empezarás a tomar a Forrester, Gartner et al con una pizca de sal, después de ver algunas de las respuestas. Honestamente, la mitad de los puntos en ese artículo (?) Son una broma. -

3 Respuestas

El artículo no es realmente correcto.

Glassfish, Resin, Jboss AS, TomEE y algunos otros son de código abierto y gratuitos. No tienes que pagar una cena a nadie para usarlos.

La parte sobre EJB es especialmente una tontería. ¡Ya no es 2004! En estos días, los EJB son muy simples y ligeros. pojos. No necesita ningún XML pesado o herencia de marco invasivo. Entre otras cosas, simplifican enormemente el trabajo con JPA y hacen que los métodos asincrónicos simples sean muy sencillos.

Una gran falsedad en "Tomcat en suficiente", es que en realidad un Tomcat desnudo nunca es suficiente. Ni una sola aplicación no trivial se ejecuta solo en Tomcat. Incluso las aplicaciones triviales tienen dificultades con eso. En cambio, la gente agrega toneladas y toneladas de bibliotecas adicionales. Normalmente, al menos JSF, Spring, Javamail, algunos impl de JTA. e hibernar. Esto equivale a unas pocas docenas de frascos, de los cuales el usuario debe asegurarse de que todos funcionen juntos y, después de un tiempo, si todavía son necesarios.

Con una implementación de Java EE, obtiene todo lo que necesita en un solo paquete. Todas las dependencias ya están resueltas para usted y está garantizado que funcionarán juntas como un todo.

Si alguien está realmente preocupado por tener una funcionalidad disponible, pero no por usarla; está el perfil web Java EE. Este es un subconjunto del perfil Java EE completo que contiene la funcionalidad que la mayoría de las aplicaciones web usarían: jsf, cdi, ejb (lite), jpa, jta y javamail.

Las implementaciones de perfiles web pueden ser muy pequeñas. La resina, por ejemplo, tiene un tamaño de 20 MB, en comparación con los 7 u 8 MB de Tomcat. Sin embargo, Resin es una solución de pila completa, mientras que Tomcat es un contenedor de servlet básico que, como se dijo, necesita toneladas de bibliotecas adicionales. El tiempo de inicio de las implementaciones de perfiles web es de unos segundos (Glassfish v3 y JBoss AS 7 comienzan en 2 a 3 segundos).

Respondido 27 ago 11, 22:08

Para ser justos, el artículo afirma que "EJB3 solucionó la debacle de EJB original, pero ¿para qué molestarse? Use Spring y no necesita un contenedor compatible con EJB". - Ali

Sí, pero eso es una tontería. Puede contrarrestar fácilmente con "¿Por qué molestarse con Spring? Use EJB y no necesita un contenedor Spring" - Mike Braun

Realmente se convierte en un punto de preferencia, pero creo que la declaración pretendía implicar que existe una alternativa viable que no requiere ninguna dependencia de la plataforma. Me doy cuenta de nuestra conversación anterior que EJB 3 ya no depende del servidor de aplicaciones, pero Spring se ejecutará en un motor de servlet simple. - Ali

EJB también se ejecuta en un "motor de servlet simple" (al igual que CDI por cierto). El punto es que cuando agrega Spring a un motor de servlet simple, ya no es un motor de servlet simple. - Mike Braun

>there is a viable alternative out there that does not require any platform dependency - Los contenedores EJB se ejecutan en cualquier JVM, que se ejecuta en cualquier sistema operativo. El código que usa EJB es portátil para muchos contenedores EJB, el código que usa Spring solo puede funcionar en un solo contenedor Spring: el creado por SpringSource. - Arjan Tijms

Aparte de toda la información útil que ya se proporcionó, me gustaría decir que muchos clientes están dispuestos a pagar dinero extra a los proveedores que brindan soporte adicional. Eche un vistazo al Soporte de IBM Websphere. Supongo que podría ser muy útil para mantener aplicaciones comerciales críticas.

Respondido 27 ago 11, 21:08

secundado ... en mi experiencia, veo muy pocos clientes que estén dispuestos a renunciar al soporte completo del proveedor que no se ofrece de manera tan completa para TC. Dicho esto, algunos están dispuestos a considerar el servidor TC de SpringSource como una posible opción (Springs tweaked tomcat además de que ofrecen paquetes de soporte comercial) - rhinds

No sé. Personalmente, creo que los paquetes de soporte son una estafa. Casi iría tan lejos como para sugerir que algunos proveedores dejan intencionalmente su software difícil de configurar / mal documentado para que puedan generar ingresos mediante la venta de contratos de soporte. Si su software es sólido y está bien documentado, no hay razón por la que alguien deba pagar por un paquete de soporte continuo. Pero eso acabaría con el flujo de ingresos de muchas de estas empresas. - aroth

@aroth, estoy parcialmente de acuerdo contigo. Estaba hablando desde la perspectiva del cliente. Una vez trabajamos para una empresa alemana, que tenía algún tipo de asociación premium con IBM. En este caso, era bastante obvio por qué eligieron IBM Websphere. - jFrenetic

Depende de lo que necesite su aplicación. Tomcat es principalmente un contenedor de servlets, mientras que JBoss, Websphere y los demás brindan soporte completo para Java EE (generalmente más características adicionales específicas de la plataforma por encima y más allá de la especificación de Java EE).

Para muchas aplicaciones, un contenedor de servlets es suficiente. Especialmente porque puede obtener muchas características similares a Java EE simplemente agrupando las bibliotecas apropiadas como parte de su aplicación web. Pero a veces necesita esta o aquella característica que solo está disponible en uno de los servidores de aplicaciones a gran escala.

Dicho esto, usar un servidor Java EE completo cuando todo lo que realmente necesitas es un contenedor de servlets me parece una tontería. Como regla general, siempre comienzo con Tomcat y solo cambio a algo como JBoss una vez que identifico la necesidad de algo que Tomcat no puede proporcionar (no sucede a menudo).

Es realmente trivial tomar una aplicación web que se ejecuta en Tomcat y hacer que se ejecute en JBoss, por lo que no hay razón para saltar directamente a la plataforma más compleja y no hay una penalización real si decides hacerlo más adelante en el juego.

En cuanto a los puntos específicos planteados en el artículo del blog:

Necesita un contenedor de aplicaciones que admita EJB

El tiene razon tu no necesito esto. Existen frameworks populares como Spring que proporcionan el mismo tipo de funcionalidad que los EJB. Puede hacerlo tan bien con uno como con otro y, por lo general, no es el caso de que utilice ambos al mismo tiempo.

Los servidores de aplicaciones optimizados optimizan el hardware

Sin comentarios. Personalmente, soy de la opinión de que, a menos que su aplicación web esté realizando un procesamiento multimedia pesado o tareas similares, el hardware moderno ha llegado al punto de que es más que lo suficientemente rápido para ejecutar lo que sea su aplicación, incluso sin ninguna optimización especial. Por eso la virtualización es tan importante. Un solo servidor es ahora demasiado poderoso para dedicarlo solo a un solo sitio, por lo que lo dividimos en varios servidores virtuales, cada uno con su propio sitio porque, de lo contrario, toda esa potencia informática simplemente se desperdicia.

El compromiso de dos fases es serio

Una vez más, no estoy en desacuerdo con la publicación del blog. Compromiso en dos fases no es serio, a menos que lo necesite. Y nunca lo he necesitado. Una base de datos con transacciones optimistas y reversión ha sido suficiente para todos los proyectos en los que he trabajado.

Manejabilidad

En mi experiencia como desarrollador, JBoss es mucho menos "manejable" que Tomcat. Es ridículamente difícil de configurar. Es cierto que no es el mismo tipo de manejabilidad al que se refiere el artículo, pero aún así vale la pena señalarlo. Aparte de eso, los contenedores Java EE generalmente tendrán muchas más características integradas en torno a la administración del servidor, pero también hay muchas herramientas de terceros que puede usar para obtener características similares de Tomcat (o cualquier otro tipo de servidor).

La agrupación en clústeres admite escalabilidad, rendimiento y disponibilidad

Tomcat admite la agrupación en clústeres y no es menos escalable que las otras plataformas. De hecho, JBoss se ejecuta sobre Tomcat, por lo que, obviamente, no hay nada en Tomcat que impida de forma inherente que escale o lo haga inadecuado para su uso como plataforma de nivel empresarial.

Respondido 28 ago 11, 04:08

algo que Tomcat no puede proporcionar: Esto es realmente lo que estoy buscando. ¿Algún ejemplo específico que recuerde? - Nivas

Lo único que encontré en el pasado es el soporte para objetos singleton en todo el clúster (es decir, una clase donde solo existe una instancia en todo el clúster, a la que todos los demás miembros del clúster pueden hacer referencia / acceder). Tomcat no tiene esto. JBoss lo hace. - aroth

El propio Tomcat solo admite Servlet y JSP. Así que hay miles de cosas que Tomcat no proporciona. Sí, agrega bibliotecas, pero también puede decir que está ejecutando en la JVM desnuda, ya que después de todo, Tomcat también es solo una funcionalidad agregada a la JVM. - Mike Braun

>A database with optimistic transactions - Supongo que te refieres a transacciones locales de recursos en combinación con bloqueos optimistas. La confirmación de dos fases es muy útil cuando varios recursos transaccionales están involucrados en un solo tx. Pueden ser dos bases de datos, pero también una base de datos y un caché distribuido, o un mensaje db, caché y jms. En todos los casos, el sistema se asegura de que no solo se actualicen o no varias tablas, sino que se actualicen o no varios recursos. La mayoría, si no todas, las transacciones XA se optimizan automáticamente para no usar 2PC cuando solo hay 1 recurso transaccional presente en el TX. - Arjan Tijms

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.