Backend
Java EE 5
``
Contexto General
- Backend
- java
- Plataforma orientada al desarrollo de aplicaciones empresariales y web distribuidas
- Enfocada en escalabilidad, portabilidad, mantenibilidad y estandarización
- EE5 marca un punto de consolidación y simplificación respecto a versiones anteriores
- JAX-WS
¿Qué es Java EE 5?
- Java EE 5 (Enterprise Edition) es una plataforma estándar para construir aplicaciones empresariales sobre Java
- Introduce una programación más declarativa mediante anotaciones, reduciendo XML
- Diseñada para ejecutarse sobre servidores de aplicaciones compatibles con el estándar
- Base de lo que hoy evolucionó hacia Jakarta EE
Arquitectura de la Plataforma
- Modelo multicapa:
- Capa de presentación
- Capa de negocio
- Capa de persistencia
- Capa de integración
- Separación clara de responsabilidades
- Comunicación entre capas mediante APIs estandarizadas
Contenedores Java EE
- Los contenedores gestionan el ciclo de vida y servicios comunes de los componentes
- Tipos principales:
- Contenedor Web
- Contenedor EJB
- Servicios proporcionados por el contenedor:
- Gestión de transacciones
- Seguridad
- Inyección de dependencias
- Pooling de recursos
- Concurrencia controlada
Componentes Principales
- Componentes Web
- Servlets
- JSP
- JSF
- Componentes de Negocio
- EJB (Session Beans, Message-Driven Beans)
- Componentes de Persistencia
- Entidades JPA
- Componentes de Integración
- Web Services
- Mensajería (JMS)
Estándares y APIs Clave
- JPA (Java Persistence API)
- Mapeo objeto-relacional (ORM)
- Abstracción sobre bases de datos relacionales
- JAX-WS vs JAX-RS
- Desarrollo de APIs RESTful
- CDI (Contexts and Dependency Injection)
- Inyección de dependencias
- Gestión de contexto y ciclo de vida
- JSF (JavaServer Faces)
- Framework MVC para interfaces web
- JSP y Servlets
- Base del desarrollo web en Java EE
- JMS (Java Message Service)
- Comunicación asíncrona basada en mensajes
Especificaciones y APIs
- Java EE se define mediante un conjunto de especificaciones formales
- Cada especificación tiene:
- Un contrato (API)
- Un comportamiento esperado
- Los proveedores implementan estas especificaciones en servidores compatibles
Servidores de Aplicaciones
- Implementan la especificación Java EE
- Ejemplos históricos y actuales:
- GlassFish
- JBoss / WildFly
- WebLogic
- WebSphere
- Permiten desplegar aplicaciones portables entre proveedores
Ventajas de Java EE 5
- Reducción significativa de configuración XML
- Programación basada en anotaciones
- Mayor productividad para aplicaciones empresariales
- Ecosistema maduro y estandarizado
- Integración nativa de múltiples tecnologías
Limitaciones y Contexto Actual
- Curva de aprendizaje elevada
- Infraestructura pesada comparada con enfoques modernos
- Evolucionó hacia Jakarta EE y arquitecturas más ligeras
- Muchas ideas influyeron directamente en frameworks como Spring
Recursos y Documentación
- Java EE 5: Visión general - Documentación de IBM
- 2.1 Introduction to the Java EE Platform (Release 7)
Java EE 5 y el Ecosistema Empresarial Java en 2025
Estado en 2025: Evolución y Relevancia
- Java EE como especificación histórica ha sido reemplazada y evolucionada por Jakarta EE tras trasladarse a la Eclipse Foundation, con un enfoque moderno y comunitario para aplicaciones empresariales y nativas en la nube.
- En 2025 la comunidad Java enfatiza Jakarta EE sobre Java EE tradicional, centrándose en la adopción de estándares modernos como Jakarta EE 11 y perfiles nativos cloud.
- El informe de desarrolladores Jakarta EE 2025 muestra un crecimiento sostenido de adopción frente a otros frameworks del ecosistema Java.
¿Qué Significa Java EE 5 Hoy?
- Java EE 5 fue una versión clave que introdujo:
- Simplificación mediante anotaciones y reducción de XML
- Integración inicial de tecnologías como EJB 3.0, JPA, JSF, Servlets, JSP
- En 2025 se considera principalmente referencia histórica y conceptual
- Sus principios siguen vigentes en Jakarta EE y frameworks modernos
Relación con Jakarta EE
- Jakarta EE es la continuación oficial de Java EE bajo la Eclipse Foundation
- Jakarta EE 11 es la versión estable y dominante en 2025
- Alineada con Java moderno
- Enfoque cloud-native y microservicios
- Jakarta EE 11 Release Details
- Migración de namespaces:
- De
javax.*ajakarta.* - Permite evolución independiente del JDK
- Jakarta EE — Namespace Change Guide
- De
Recursos Oficiales y Documentación
- Java EE 5 (histórico)
- Documentación, APIs y tutoriales originales
- Eclipse Foundation
- Reportes, encuestas y gobernanza del estándar
Servidores de Aplicaciones y Soporte
- Implementaciones modernas compatibles con Jakarta EE:
- WildFly (JBoss)
- Servidor de aplicaciones empresarial activo en 2025
- WildFly Official Site
- GlassFish
- Implementación de referencia histórica y de pruebas
- GlassFish Project
- WildFly (JBoss)
Formación y Aprendizaje Actualizado (2025)
- Formación orientada a Jakarta EE y ecosistema moderno:
- APIs REST (JAX-RS)
- Persistencia con JPA
- Inyección con CDI
- Frontend con JSF
- Plataformas educativas:
Comparativas con Tecnologías y Tendencias
- Influencia directa de:
- Cloud native
- Microservicios
- Contenedores y Kubernetes
- Comparaciones frecuentes en 2025:
- Jakarta EE vs Spring
- Jakarta EE vs Quarkus
- Jakarta EE + MicroProfile
Recursos Relevantes (2025)
- Documentación Java EE 5 (Oracle)
- Jakarta EE Developer Survey 2025
- Jakarta EE 11 Release
- WildFly Application Server
- Formación Jakarta EE
Java EE / Jakarta EE — Conceptos Avanzados y Temas No Cubiertos (2025)
Perfiles de Plataforma
- Jakarta EE se divide en perfiles para distintos tipos de aplicaciones
- Permiten reducir complejidad y dependencias
- Principales perfiles:
- Jakarta EE Web Profile
- Enfocado en aplicaciones web tradicionales y APIs REST
- Incluye Servlets, JAX-RS, CDI, JPA, Bean Validation
- Jakarta EE Core Profile
- Pensado para microservicios y runtimes ligeros
- Compatible con ejecución en contenedores
- Jakarta EE Full Platform
- Incluye todas las especificaciones empresariales
- Jakarta EE Web Profile
Jakarta EE y MicroProfile
- Eclipse MicroProfile complementa Jakarta EE
- Aporta APIs orientadas a microservicios:
- Configuración externa
- Health checks
- Métricas
- Trazabilidad distribuida
- Tolerancia a fallos
- Uso común:
- Jakarta EE para el core
- MicroProfile para capacidades cloud-native
- Integración directa en servidores como WildFly, Payara y Open Liberty
Modelos de Despliegue Modernos
- Evolución del despliegue tradicional EAR/WAR:
- WAR auto-contenidos
- Uber-JAR con runtime embebido
- Enfoques actuales:
- Docker + Kubernetes
- CI/CD orientado a despliegues frecuentes
- Infraestructura declarativa
- Jakarta EE se adapta a:
- Contenedores
- Orquestadores
- Entornos híbridos
Seguridad Empresarial
- APIs modernas de seguridad:
- Jakarta Security
- Jakarta Authentication
- Jakarta Authorization
- Integración con:
- OAuth2
- OpenID Connect
- JWT
- Uso típico:
- Seguridad declarativa
- Autenticación delegada
- Autorización basada en roles
Observabilidad y Operación
- Conceptos clave en 2025:
- Logging estructurado
- Métricas
- Trazas distribuidas
- Integración con:
- Prometheus
- OpenTelemetry
- Grafana
- MicroProfile Metrics y Telemetry como estándar de facto
Persistencia Avanzada
- JPA más allá del CRUD:
- Caching de segundo nivel
- Estrategias de fetch
- Control de transacciones finas
- Integración con:
- Bases de datos relacionales
- Bases de datos distribuidas
- Uso combinado con:
- CQRS
- Event-driven architectures
Mensajería y Arquitecturas Asíncronas
- Jakarta Messaging (JMS):
- Comunicación desacoplada
- Procesamiento asíncrono
- Casos habituales:
- Event-driven systems
- Integración entre sistemas
- Procesamiento en segundo plano
- Integración con brokers modernos:
- ActiveMQ
- Kafka (mediante adaptadores)
Testing en el Ecosistema Jakarta EE
- Testing más allá de unit tests:
- Integration testing
- Container-based testing
- Herramientas comunes:
- Arquillian
- Testcontainers
- JUnit 5
- Beneficios:
- Tests cercanos al entorno real
- Validación de configuraciones y contenedores
Gobernanza y Estándares
- Jakarta EE es gobernado por:
- Eclipse Foundation
- Working Groups abiertos
- Ventajas del modelo:
- Transparencia
- Evolución independiente del JDK
- Participación de múltiples vendors
- Diferencia clave frente a frameworks propietarios
Casos de Uso Reales en 2025
- Sistemas legacy modernizados
- Backends empresariales de larga vida
- APIs REST estables y estandarizadas
- Plataformas que requieren:
- Portabilidad
- Longevidad
- Vendor lock-in mínimo
Relación con Frameworks Modernos
- Jakarta EE no compite directamente con:
- Spring Boot
- Quarkus
- Se complementa según el contexto:
- Jakarta EE: estándares y portabilidad
- Frameworks: productividad y abstracción
- Decisión basada en:
- Tamaño del equipo
- Requisitos de mantenimiento
- Ciclo de vida del proyecto
Futuro del Ecosistema
- Tendencias claras:
- Menos XML, más código declarativo
- Perfiles más pequeños
- Mejor integración cloud-native
- Jakarta EE se posiciona como:
- Base estable y estandarizada
- Alternativa a soluciones propietarias
- Plataforma de largo plazo para empresas
Jakarta EE / Java EE — Guía Práctica con Casos de Uso y Ejemplos de Código
Caso de Uso: API REST Empresarial
- Exposición de servicios backend estables
- Uso típico en:
- Frontends web
- Apps móviles
- Integraciones entre sistemas
Ejemplo JAX-RS — Recurso REST
@Path("/clientes")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ClienteResource {
@Inject
private ClienteService service;
@GET
public List<Cliente> listar() {
return service.obtenerTodos();
}
@POST
public Response crear(Cliente cliente) {
service.guardar(cliente);
return Response.status(Response.Status.CREATED).build();
}
}
`
Caso de Uso: Lógica de Negocio Transaccional
- Encapsulación de reglas de negocio
- Manejo automático de transacciones
- Ideal para procesos críticos
Ejemplo EJB — Servicio de Negocio
@Stateless
public class ClienteService {
@PersistenceContext
private EntityManager em;
public List<Cliente> obtenerTodos() {
return em.createQuery("SELECT c FROM Cliente c", Cliente.class)
.getResultList();
}
public void guardar(Cliente cliente) {
em.persist(cliente);
}
}
Caso de Uso: Persistencia con JPA
- Abstracción de base de datos
- Portabilidad entre proveedores
- Modelo orientado a entidades
Ejemplo JPA — Entidad
@Entity
@Table(name = "clientes")
public class Cliente {
@Id
@GeneratedValue
private Long id;
private String nombre;
private String email;
// getters y setters
}
Caso de Uso: Inyección de Dependencias
- Desacoplar componentes
- Facilitar testing y mantenimiento
- Gestión automática del ciclo de vida
Ejemplo CDI — Bean Inyectable
@ApplicationScoped
public class EmailService {
public void enviar(String destino, String mensaje) {
System.out.println("Enviando email a " + destino);
}
}
Caso de Uso: Integración de Servicios
- Comunicación entre sistemas
- Procesos desacoplados
- Arquitecturas orientadas a eventos
Ejemplo JMS — Productor de Mensajes
@Stateless
public class NotificacionProducer {
@Resource(lookup = "jms/Queue")
private Queue queue;
@Resource
private JMSContext context;
public void enviar(String mensaje) {
context.createProducer().send(queue, mensaje);
}
}
Caso de Uso: Procesamiento Asíncrono
- Tareas de larga duración
- Evitar bloqueos en peticiones HTTP
- Escalabilidad
Ejemplo EJB — Método Asíncrono
@Stateless
public class ReporteService {
@Asynchronous
public void generarReporte() {
// lógica pesada
}
}
Caso de Uso: Seguridad Declarativa
- Control de acceso basado en roles
- Menos código imperativo
- Integración con proveedores externos
Ejemplo Jakarta Security
@RolesAllowed("ADMIN")
@GET
@Path("/admin")
public Response zonaAdmin() {
return Response.ok("Acceso concedido").build();
}
Caso de Uso: Validación de Datos
- Validaciones automáticas
- Reglas declarativas
- Menos lógica manual
Ejemplo Bean Validation
public class UsuarioDTO {
@NotNull
@Email
private String email;
@Size(min = 8)
private String password;
}
Caso de Uso: Aplicación Web Tradicional
- Backoffice
- Sistemas internos
- Formularios y flujos complejos
Ejemplo JSF — Managed Bean
@Named
@RequestScoped
public class ClienteBean {
private Cliente cliente = new Cliente();
public void guardar() {
// persistir cliente
}
public Cliente getCliente() {
return cliente;
}
}
Caso de Uso: Configuración Externa (MicroProfile)
- Separar configuración del código
- Adaptación por entorno
- Cloud-native
Ejemplo MicroProfile Config
@ApplicationScoped
public class ConfigService {
@Inject
@ConfigProperty(name = "app.nombre")
String nombreApp;
public String obtenerNombre() {
return nombreApp;
}
}
Caso de Uso: Observabilidad
- Monitoreo en producción
- Métricas y salud del sistema
- Diagnóstico rápido
Ejemplo MicroProfile Health
@Readiness
@ApplicationScoped
public class HealthCheckServicio implements HealthCheck {
@Override
public HealthCheckResponse call() {
return HealthCheckResponse.up("servicio-activo");
}
}
Caso de Uso: Testing de Integración
- Validar comportamiento real
- Entorno cercano a producción
- Detectar errores de configuración
Ejemplo Testcontainers + JUnit
@Testcontainers
public class ClienteIT {
@Container
static PostgreSQLContainer<?> db =
new PostgreSQLContainer<>("postgres:15");
@Test
void contextoArranca() {
assertTrue(db.isRunning());
}
}
Caso de Uso: Despliegue Empresarial
- Aplicaciones de larga vida
- Portabilidad entre servidores
- Control operacional
Ejemplo Estructura WAR
app.war
├─ WEB-INF
│ ├─ web.xml
│ └─ beans.xml
├─ index.xhtml
└─ resources
JAX-RS vs JAX-WS
Visión General
- JAX-RS y JAX-WS son especificaciones de Java EE / Jakarta EE para exponer servicios
- Resuelven el mismo problema general (comunicación entre sistemas), pero con enfoques muy distintos
- En 2025 su uso y relevancia son claramente diferentes
Enfoque Arquitectónico
- JAX-RS
- Orientado a REST
- Basado en recursos
- Comunicación ligera sobre HTTP
- Usa verbos HTTP de forma semántica
- JAX-WS
- Orientado a SOAP
- Basado en contratos estrictos
- Comunicación basada en mensajes XML
- Enfoque más formal y protocolizado
Modelo de Comunicación
- JAX-RS
- Resource-oriented
- URLs representan recursos
- Estado transferido mediante representaciones (JSON, XML)
- JAX-WS
- Operation-oriented
- Métodos expuestos como operaciones remotas
- Mensajes SOAP encapsulan la llamada
Protocolos y Formatos
- JAX-RS
- Protocolo principal: HTTP
- Formatos comunes:
- JSON
- XML
- Plain text
- JAX-WS
- Protocolo SOAP sobre:
- HTTP
- HTTPS
- JMS
- Formato:
- XML (SOAP Envelope)
- Protocolo SOAP sobre:
Contrato y Tipado
- JAX-RS
- Contrato implícito
- Documentación mediante OpenAPI / Swagger
- Mayor flexibilidad
- JAX-WS
- Contrato explícito mediante WSDL
- Tipado fuerte y estricto
- Generación automática de clientes y stubs
Complejidad
- JAX-RS
- Curva de aprendizaje baja
- Menos configuración
- Menor sobrecarga
- JAX-WS
- Curva de aprendizaje alta
- Mayor verbosidad
- Configuración compleja
Casos de Uso Típicos
- JAX-RS
- APIs REST públicas
- Backends para frontend
- Microservicios
- Integraciones modernas
- Arquitecturas cloud-native
- JAX-WS
- Integraciones empresariales legacy
- Sistemas bancarios y gubernamentales
- Entornos con contratos estrictos
- Integraciones B2B tradicionales
Ejemplo Básico JAX-RS
Recurso REST
@Path("/pedidos")
@Produces(MediaType.APPLICATION_JSON)
public class PedidoResource {
@GET
public List<Pedido> listar() {
return List.of();
}
}
`
Ejemplo Básico JAX-WS
Servicio SOAP
@WebService
public class PedidoService {
@WebMethod
public List<Pedido> listarPedidos() {
return List.of();
}
}
Manejo de Errores
-
JAX-RS
- Códigos HTTP estándar
- Responses semánticas (404, 400, 500)
-
- SOAP Faults
- Errores encapsulados en XML
Seguridad
-
JAX-RS
- JWT
- OAuth2
- OpenID Connect
- Seguridad alineada con HTTP
-
- WS-Security
- Firmas digitales
- Encriptación a nivel mensaje
Rendimiento y Escalabilidad
-
JAX-RS
- Ligero
- Mejor para alta concurrencia
- Ideal para microservicios
-
- Mayor sobrecarga
- Menor rendimiento relativo
- Adecuado para integraciones críticas pero estables
Estado en 2025
-
JAX-RS
- Estándar dominante en Jakarta EE
- Uso activo y recomendado
- Integrado con MicroProfile y OpenAPI
-
- Uso decreciente
- Mayormente en sistemas legacy
- Mantenido por compatibilidad
Cuándo Elegir Cada Uno
-
Elegir JAX-RS si:
- Diseñas una API nueva
- Necesitas REST y JSON
- Buscas simplicidad y escalabilidad
-
Elegir JAX-WS si:
- Debes integrarte con sistemas SOAP existentes
- Requieres contratos WSDL estrictos
- Operas en entornos enterprise legacy
Resumen Rápido
- JAX-RS → moderno, REST, ligero, flexible
- JAX-WS → formal, SOAP, robusto, legacy
¿Te gusta este contenido? Suscríbete vía RSS