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

RESOLUCION SET BASICO DE FACTURA ELECTRÓNICA SII

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

Configurando Servlets y JSP en Jetty