Pero si añadir (...) entonces no tengo que efectivamente un servidor de aplicaciones Java EE? Y entonces, ¿no son mis ejotes EJB? ¿O hay alguna otra característica definitoria?
No, no tiene un servidor de aplicaciones Java EE, un servidor de aplicaciones Java EE completo es más que Tomcat + Spring + un administrador de transacciones independiente. E incluso si agrega un proveedor JMS y un contenedor EJB, aún no tendrá un servidor Java EE. El pegamento entre todas las partes es importante para IMO y es parte del valor agregado de un contenedor Java EE.
En cuanto a los EJB, la especificación EJB es mucho más que JPA y especifica también beans de sesión y beans controlados por mensajes (en realidad, realmente no considero entidades JPA como EJB incluso si JPA es parte de la especificación EJB 3.0 en Java EE 5 por razones históricas, lo que ya no es cierto en Java EE 6, JPA 2.0 y EJB 3.1 son especificaciones separadas). También debería mencionar que un bean Spring anotado con @Transactional
no es equivalente a un Session Bean. Un contenedor Java EE puede hacer más cosas con Session Beans (ver a continuación). Puede que no los necesites, pero aún así, no son estrictamente equivalentes.
Por último, los contenedores Java EE implementan un estándar, el contenedor Spring no, es propietario.
¿Qué es lo que un servidor de aplicaciones compatible con Java EE le ofrece que no puede obtener fácilmente/fácilmente de Tomcat con algunos subsistemas de terceros?
Como dije, creo que el "pegamento" es una parte del valor agregado y contribuye en gran medida a la robustez del conjunto. Entonces, el answer de ewernli subrayó muy bien lo que es difícil de lograr.Yo sólo añadiría:
- agrupación y Fail-over (para lograr la tolerancia a fallos)
- instalaciones de la Administración
Sí, un buen servidor Java EE hará cosas con buena pinta a mejorar la tolerancia a fallas (clustering de pools de conexión, árbol JNDI, destinos JMS, reintento automático con beans idempotentes, clientes EJB inteligentes, recuperación de transacciones, migración de servicios, etc.). Para aplicaciones de "misión crítica", la gran mayoría no lo son, esto es importante. Y en tales casos, las bibliotecas en la parte superior de la API de Servlet son IMO no un reemplazo.
Como nota al margen, Apache Tomcat se puede utilizar como parte de un servidor completo JavaEE; más específicamente JBoss o Apache Geronimo. – Powerlord
Y más recientemente, Apache TomEE –