Jakarta EE vs Spring Boot: WAR, JAR, Docker y Jetty ¿quién dijo que no se puede?

Siempre hay dudas sobre qué es Jakarta EE y qué es Spring Boot, si una es más moderna que la otra, o si solo una permite microservicios o desplegar como JAR.
La realidad es que ambas tecnologías pueden hacer prácticamente lo mismo, con enfoques y filosofías distintas. En esta entrada te lo explico sin vueltas.

🧱 ¿Qué son Jakarta EE y Spring Boot?

  • Jakarta EE (ex Java EE): es el estándar para construir aplicaciones empresariales en Java. Define especificaciones como Servlets, JPA, CDI, JAX-RS, etc. Es mantenido por la Eclipse Foundation.
  • Spring Boot: es un framework de productividad basado en el ecosistema Spring. Permite levantar aplicaciones listas para producción de forma muy rápida, con configuración automática, servidor embebido y mucha integración.

⚙️ WAR o JAR: ambas lo permiten

Tecnología WAR tradicional JAR ejecutable
Spring Boot ✅ Sí, si excluyes servidor embebido ✅ Nativamente, con servidor embebido
Jakarta EE ✅ Clásico con WildFly, Payara, etc. ✅ Sí, con Payara Micro, Liberty, Quarkus, etc.

🐳 Docker: totalmente posible con ambas

Spring Boot (JAR)

FROM eclipse-temurin:21-jdk
COPY target/app.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

Jakarta EE (WAR + Micro Profile)

FROM payara/micro:latest
COPY target/app.war /opt/payara/deployments

También puedes hacerlo con:

  • Quarkus (modo JVM o nativo)
  • Open Liberty
  • Helidon
  • WildFly Bootable JAR

🧠 Jetty: un contenedor común para ambos mundos

Jetty puede ser usado tanto con Jakarta EE como con Spring Boot, y también puede ser embebido dentro de un JAR.

  • Spring Boot puede usar Jetty en lugar de Tomcat
  • Jakarta EE puede ejecutar Servlets, filtros y otros componentes en Jetty embebido

Ejemplo de Jetty embebido en Java

Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
context.addServlet(MyServlet.class, "/mi-api");
server.start();
server.join();

📌 En resumen

Característica Jakarta EE Spring Boot
Estándar abierto ✅ Sí ❌ No
WAR tradicional ✅ Sí ✅ Sí, con ajustes
JAR ejecutable ✅ Sí ✅ Sí
Docker support ✅ Sí ✅ Sí
Jetty embebido ✅ Sí ✅ Sí
Microservicios ✅ Sí ✅ Sí
Comunidad Activa y basada en estándares Masiva, orientada a productividad
Nota final:
Puede sonar disparatado, pero no existe una verdad absoluta sobre cómo construir tu aplicación Java. Lo cierto es que tú eliges cómo hacerlo, según tus necesidades, tu contexto y tu experiencia. Puedes usar Jakarta EE embebido en un JAR, Spring Boot desplegado como WAR, Jetty como contenedor de ambos, o mezclar tecnologías de forma creativa.

Lo importante es entender las herramientas y tomar decisiones con conocimiento, no por moda.

Comentarios

Entradas populares de este blog

Configurando Servlets y JSP en Jetty

Firma de un Documento XML con Certificado Digital en Java para Uso Tributario en Chile

RESOLUCION SET BASICO DE FACTURA ELECTRÓNICA SII