## Bloque 3 Tema 5. Arquitectura Java EE/Jakarta EE y plataforma .NET. Componentes, persistencia y seguridad. Características, lenguajes y desarrollo de interfaces.

Este tema estudia las dos grandes plataformas de desarrollo empresarial: Jakarta EE, sucesor de Java EE, y la plataforma .NET de Microsoft. También estudia la persistencia, la seguridad y el desarrollo de interfaces en ambos entornos.

---

## 1. Arquitectura Java EE / Jakarta EE

### 1.1. Definición y origen

Java EE, o Java Enterprise Edition, era la plataforma de Oracle para el desarrollo de aplicaciones empresariales en Java. En 2017 Oracle donó la plataforma a la Eclipse Foundation, que la renombró como Jakarta EE. A partir de la versión 9, todos los paquetes cambiaron del prefijo javax al prefijo jakarta. Permite crear aplicaciones web, distribuidas y escalables, que se ejecutan sobre un servidor de aplicaciones que implementa las APIs de la especificación.

---

### 1.2. Servidor de aplicaciones

Un servidor de aplicaciones es el software que proporciona los servicios de infraestructura necesarios a las aplicaciones empresariales. Sus funciones son la ejecución de aplicaciones web mediante Servlets y JSP, la gestión de transacciones, la seguridad, el pool de conexiones a base de datos y la gestión de sesiones. El servidor implementa las APIs de Jakarta EE. Los servidores más conocidos son WildFly, antes llamado JBoss, que es de Red Hat y es de código abierto; GlassFish de la Eclipse Foundation; WebLogic de Oracle; y WebSphere de IBM. Es importante saber que Apache Tomcat no es un servidor Jakarta EE completo, porque solo implementa Servlets y JSP, sin el perfil completo de la especificación.

---

### 1.3. APIs principales

Los Servlets son componentes Java que gestionan peticiones y respuestas HTTP. Soportan los métodos GET, POST, PUT, DELETE, HEAD y OPTIONS. Su ciclo de vida tiene tres fases: init para la inicialización, service para el procesamiento de peticiones, y destroy para la liberación de recursos. Son la base del desarrollo web en Java.

Las JSP o JavaServer Pages son páginas HTML con código Java incrustado que se compilan a un Servlet en el servidor para generar contenido dinámico. Su uso ha disminuido en favor de motores de plantillas modernos como Thymeleaf.

Los EJB o Enterprise JavaBeans son componentes de lógica de negocio con servicios gestionados automáticamente por el contenedor del servidor: transacciones, seguridad y concurrencia. Existen tres tipos: Session Bean sin estado, que es escalable y no conserva información entre llamadas; Session Bean con estado, que mantiene el estado para un cliente concreto; y Message-Driven Bean, para el procesamiento de mensajes asíncronos mediante JMS.

JSF o JavaServer Faces es el framework estándar de Jakarta EE para interfaces web basadas en componentes. Sigue el patrón MVC.

JPA o Java Persistence API es la API estándar para la persistencia de objetos en bases de datos relacionales. Permite mapear clases Java a tablas mediante anotaciones como Entity, Table, Id, Column y las relaciones OneToMany, ManyToOne y ManyToMany. Las consultas se escriben en JPQL, el Java Persistence Query Language, que opera sobre entidades y atributos en lugar de tablas y columnas. La implementación más popular es Hibernate.

JTA o Java Transaction API gestiona las transacciones distribuidas garantizando las propiedades ACID: atomicidad, que significa que toda la transacción se ejecuta o ninguna parte; consistencia, que asegura que la base de datos pasa de un estado válido a otro; aislamiento, que evita interferencias entre transacciones concurrentes; y durabilidad, que garantiza que los cambios confirmados son permanentes.

CDI o Contexts and Dependency Injection es el framework de inyección de dependencias de Jakarta EE. Gestiona el ciclo de vida de los objetos y permite inyectar dependencias mediante la anotación Inject, favoreciendo el bajo acoplamiento y la modularidad.

En resumen: Jakarta EE se ejecuta sobre servidores de aplicaciones como WildFly o GlassFish. Sus APIs clave son Servlet para HTTP, JSP para páginas dinámicas, EJB para lógica de negocio, JPA para persistencia, JTA para transacciones y CDI para inyección de dependencias.

---

## 2. Persistencia en Java

### 2.1. JDBC y patrón DAO

JDBC, o Java Database Connectivity, es la API estándar de Java para el acceso directo a bases de datos relacionales mediante SQL. Los pasos de uso son: cargar el driver del SGBD, establecer la conexión mediante DriverManager, crear un Statement o PreparedStatement, ejecutar la consulta SQL, procesar el ResultSet y cerrar la conexión. Sus ventajas son el control total sobre el SQL y el máximo rendimiento. Sus desventajas son el código repetitivo conocido como boilerplate y el acoplamiento al SGBD concreto. El patrón DAO, o Data Access Object, encapsula la lógica de acceso a datos en una capa separada, aislando la lógica de negocio del mecanismo de persistencia.

---

### 2.2. ORM, JPA e Hibernate

El ORM u Object-Relational Mapping es una técnica que mapea el modelo de objetos con el modelo relacional de la base de datos. Una tabla se convierte en una clase, una fila en un objeto, una columna en un atributo, la clave primaria en el identificador marcado con la anotación Id, y la clave foránea en una referencia a otro objeto.

JPA es la especificación estándar y Hibernate su implementación más popular. JPQL es similar a SQL pero orientado a objetos: opera sobre entidades y atributos en lugar de tablas y columnas, lo que hace las consultas más portables entre distintos gestores de base de datos. Spring Data JPA añade una capa de abstracción sobre JPA que genera automáticamente las consultas a partir del nombre del método: por ejemplo, un método llamado findByDepartamentoNombre genera la consulta correspondiente sin necesidad de escribirla. Para la documentación del código Java se usa JavaDoc. Para la documentación de APIs REST se usa Swagger u OpenAPI.

En resumen: la persistencia en Java puede gestionarse con JDBC para acceso SQL directo, o con JPA e Hibernate como ORM. JPA mapea clases a tablas mediante anotaciones y las consultas se escriben en JPQL. Spring Data JPA simplifica el acceso generando consultas automáticamente.

---

## 3. Seguridad en Java EE

### 3.1. Tipos de seguridad

La seguridad en Java EE puede configurarse de dos formas. La seguridad declarativa se configura mediante anotaciones como RolesAllowed, PermitAll o DenyAll, o mediante ficheros de configuración. No requiere código adicional en la lógica de negocio y el servidor de aplicaciones gestiona el control de acceso basándose en los roles del usuario. La seguridad programática se implementa directamente en el código Java para casos más complejos, utilizando el SecurityContext o métodos como isUserInRole del HttpServletRequest.

---

### 3.2. Spring Security

Spring Security es el framework de seguridad estándar de facto en el ecosistema Java. Proporciona autenticación, que es la verificación de la identidad del usuario mediante contraseña, token JWT u OAuth2; autorización, que controla el acceso a recursos según los roles y permisos; protección contra CSRF o Cross-Site Request Forgery; gestión de sesiones; y cifrado de contraseñas mediante algoritmos seguros como BCrypt. Los mecanismos de autenticación soportados son: formulario HTML clásico; HTTP Basic mediante la cabecera Authorization; JWT o JSON Web Token, que es un token firmado sin estado especialmente útil en APIs REST; OAuth2 y OpenID Connect para delegación a proveedores externos como Google o GitHub; y LDAP para directorios corporativos.

En resumen: la seguridad en Java EE puede ser declarativa mediante anotaciones o programática mediante código. Spring Security gestiona autenticación, autorización, protección CSRF y soporta JWT y OAuth2.

---

## 4. Plataforma .NET

### 4.1. Definición y componentes

.NET es la plataforma de desarrollo de Microsoft para crear aplicaciones web, de escritorio, servicios y aplicaciones móviles. Evolucionó desde .NET Framework en 2002, que solo funcionaba en Windows, pasando por .NET Core en 2016 que lo hizo multiplataforma para Windows, Linux y macOS, hasta la unificación bajo el nombre .NET a partir de la versión 5 en 2020. Sus componentes principales son: el CLR o Common Language Runtime, que es la máquina virtual equivalente a la JVM de Java y compila el código IL justo a tiempo con el compilador JIT; la BCL o Base Class Library, que son las librerías base del framework; ASP.NET Core para el desarrollo web; y Entity Framework Core como ORM.

---

### 4.2. Lenguajes de .NET

Todos los lenguajes de .NET compilan a IL o Intermediate Language y se ejecutan en el CLR. El lenguaje principal es C#, que es orientado a objetos y se usa para aplicaciones empresariales, web y de escritorio. VB.NET es el sucesor del clásico Visual Basic y se usa principalmente en aplicaciones legacy de Windows. F# es un lenguaje funcional orientado al análisis de datos y la computación científica.

---

### 4.3. Persistencia en .NET

ADO.NET es el acceso directo a bases de datos mediante SQL, equivalente a JDBC en Java. Sus clases principales son SqlConnection para la conexión, SqlCommand para ejecutar comandos, SqlDataReader para leer resultados y DataSet para almacenar datos en memoria. Entity Framework Core es el ORM de .NET, equivalente a JPA e Hibernate. Ofrece tres enfoques: Code First, en el que se definen primero las clases y Entity Framework genera la base de datos a partir de ellas; Database First, en el que se parte de una base de datos existente y Entity Framework genera las clases automáticamente; y Model First, en el que se diseña el modelo visual y Entity Framework genera tanto la base de datos como las clases. Las consultas se escriben con LINQ, o Language Integrated Query, que permite escribir consultas tipadas directamente en C# con verificación de tipos en tiempo de compilación, de forma similar a JPQL pero integrada en el lenguaje.

---

### 4.4. Seguridad en .NET

La seguridad en .NET está integrada en ASP.NET Core mediante middleware. Se basa en claims y roles. Los métodos de autenticación soportados son: Windows Authentication para la integración con Active Directory y dominios corporativos; JWT o JSON Web Token para APIs REST sin estado; OAuth2 y OpenID Connect para delegación a proveedores externos; y autenticación basada en cookies para aplicaciones web tradicionales.

En resumen: .NET es la plataforma de Microsoft, multiplataforma desde .NET Core. Sus componentes clave son el CLR como máquina virtual, ASP.NET Core para web, ADO.NET para acceso SQL directo y Entity Framework Core como ORM. El lenguaje principal es C#.

---

## 5. Comparativa Java EE vs .NET

Tanto Java EE como .NET son plataformas empresariales maduras con componentes equivalentes. Java EE usa la JVM como máquina virtual mientras que .NET usa el CLR. El lenguaje principal de Java EE es Java y el de .NET es C#. Para el desarrollo web, Java EE usa Spring MVC o JSF y .NET usa ASP.NET Core. Para la persistencia, Java EE usa JPA e Hibernate y .NET usa Entity Framework Core. Para el acceso SQL directo, Java EE usa JDBC y .NET usa ADO.NET. Para la seguridad, Java EE suele usar Spring Security y .NET tiene seguridad integrada en ASP.NET Core. Ambas plataformas son multiplataforma en sus versiones modernas, ambas son principalmente de código abierto, y la elección entre una y otra depende del ecosistema de la organización y del perfil del equipo de desarrollo.

---

## 6. Desarrollo de interfaces

### 6.1. Tecnologías front-end

El front-end es la parte de la aplicación que se ejecuta en el navegador del usuario. Se desarrolla con tres tecnologías base: HTML para la estructura y el contenido de la página, CSS para la presentación y el diseño visual, y JavaScript para el comportamiento y la interactividad. Los frameworks de front-end más usados son Angular de Google, que es un framework completo que usa TypeScript; React de Meta, que es una librería de interfaz de usuario que usa JSX; y Vue, que es un framework progresivo mantenido por la comunidad.

---

### 6.2. Comunicación cliente-servidor

La comunicación entre el front-end y el back-end se realiza mediante HTTP o HTTPS. Las arquitecturas de API más habituales son REST, que usa JSON como formato de datos, no mantiene estado entre peticiones y se apoya en los verbos HTTP; SOAP, que usa XML con un contrato formal definido mediante WSDL y se usa en entornos corporativos con requisitos estrictos de interoperabilidad; GraphQL, en el que el cliente especifica exactamente los datos que necesita, reduciendo el tráfico innecesario; y WebSocket, que permite comunicación bidireccional en tiempo real entre cliente y servidor.

---

### 6.3. Tipos de aplicaciones web

Las aplicaciones web pueden clasificarse en varios tipos. Las MPA o Multi-Page Applications generan una nueva página completa desde el servidor en cada acción del usuario, usando tecnologías como Thymeleaf, JSP o Razor. Las SPA o Single-Page Applications cargan una única página inicial y actualizan el contenido dinámicamente mediante llamadas a una API, usando frameworks como Angular, React o Vue. Las PWA o Progressive Web Apps son SPA con capacidades adicionales como funcionamiento offline y notificaciones push, implementadas mediante Service Workers. Las SSR o Server-Side Rendering, como Next.js o Nuxt.js, combinan ambos modelos renderizando la página inicial en el servidor para mejorar el rendimiento y el posicionamiento en buscadores.

En resumen: el front-end usa HTML, CSS y JavaScript. Los frameworks más usados son Angular, React y Vue. La comunicación con el back-end se realiza principalmente mediante APIs REST con JSON sobre HTTPS. Las SPA son el modelo más habitual en aplicaciones modernas.

---

## Miniresumen final del tema

Este tema cubre las dos grandes plataformas empresariales de desarrollo. Jakarta EE es la evolución de Java EE, gestionada por la Eclipse Foundation, que se ejecuta sobre servidores de aplicaciones como WildFly o GlassFish. Sus APIs principales son Servlet para gestionar HTTP, JPA para la persistencia mediante ORM con consultas en JPQL, JTA para las transacciones con propiedades ACID, y Spring Security para la autenticación y autorización. La persistencia en Java usa JDBC para acceso SQL directo o JPA e Hibernate como ORM. .NET es la plataforma de Microsoft con CLR como máquina virtual, C# como lenguaje principal, ASP.NET Core para web, ADO.NET para acceso SQL directo y Entity Framework Core como ORM con consultas en LINQ. Ambas plataformas son equivalentes y multiplataforma en sus versiones modernas. El desarrollo de interfaces usa HTML, CSS y JavaScript en el front-end, frameworks como Angular, React y Vue, y comunicación REST con JSON entre cliente y servidor.

---

## 1. Arquitectura Java EE y Jakarta EE

Java EE, o Java Enterprise Edition, era la plataforma de Oracle para el desarrollo de aplicaciones empresariales en Java. En 2017 Oracle donó la plataforma a la Eclipse Foundation, que la renombró como Jakarta EE. Permite crear aplicaciones web, distribuidas y escalables que se ejecutan sobre un servidor de aplicaciones.

Un servidor de aplicaciones es el software que proporciona los servicios necesarios a las aplicaciones empresariales: ejecución de aplicaciones web, gestión de transacciones, seguridad, gestión del pool de conexiones a base de datos y gestión de sesiones. El servidor de aplicaciones implementa las APIs de Jakarta EE. Los ejemplos más conocidos son WildFly, GlassFish y WebLogic.

Las APIs principales de Jakarta EE son las siguientes.

Los Servlets gestionan peticiones HTTP mediante los métodos GET, POST, PUT y DELETE. Son la base del desarrollo web en Java y definen el flujo de petición del cliente al servlet y de vuelta a la respuesta.

Las JSP o JavaServer Pages son páginas HTML con código Java incrustado que generan contenido dinámico en el servidor. Su uso ha disminuido en favor de frameworks modernos.

Los EJB o Enterprise JavaBeans son componentes de lógica de negocio con gestión automática de transacciones, seguridad y concurrencia. Su uso también ha declinado en las aplicaciones modernas.

JSF o JavaServer Faces es el framework estándar de Jakarta EE para desarrollar interfaces web basadas en componentes.

JPA o Java Persistence API es la API estándar para la persistencia de datos en Java. Permite mapear objetos Java a tablas de base de datos y realizar consultas orientadas a objetos mediante JPQL, el Java Persistence Query Language.

JTA o Java Transaction API gestiona las transacciones distribuidas garantizando las propiedades ACID.

---

## 2. Persistencia en Java

La persistencia es la capacidad de almacenar y recuperar datos de forma permanente.

JDBC o Java Database Connectivity es el acceso directo a la base de datos mediante SQL. Ofrece control total sobre las consultas pero requiere mucho código manual. Se asocia con el patrón de diseño DAO, o Data Access Object.

El ORM u Object Relational Mapping es el mapeo objeto-relacional que transforma tablas en clases y registros en objetos. La API estándar es JPA y su implementación más popular es Hibernate. Las consultas se escriben en JPQL en lugar de SQL nativo.

La documentación de APIs REST se gestiona con Swagger u OpenAPI. El código Java se documenta con JavaDoc.

---

## 3. Seguridad en Java EE

La seguridad en Java EE puede ser declarativa o programática. La seguridad declarativa se configura mediante ficheros o anotaciones y está basada en roles sin necesidad de código. La seguridad programática se implementa directamente en el código para casos más complejos.

Spring Security es el framework más popular para seguridad en aplicaciones Java. Proporciona autenticación, autorización, control de accesos y protección contra CSRF o Cross-Site Request Forgery.

---

## 4. Plataforma .NET

.NET es la plataforma de Microsoft para el desarrollo de aplicaciones. Permite crear aplicaciones web, de escritorio y servicios. En su versión moderna, .NET es multiplataforma y puede ejecutarse en Windows, Linux y macOS.

Los componentes principales de .NET son el CLR o Common Language Runtime, que es la máquina virtual que ejecuta el código compilado a un lenguaje intermedio llamado CIL; el framework de clases base o BCL, que proporciona las librerías fundamentales; y ASP.NET, que es el framework para el desarrollo de aplicaciones web.

Los lenguajes de .NET son C#, que es el lenguaje principal; VB.NET; y F#, que es un lenguaje funcional.

La persistencia en .NET se gestiona con ADO.NET, que es el acceso directo a bases de datos equivalente a JDBC; y con Entity Framework, que es el ORM de .NET equivalente a JPA e Hibernate.

La seguridad en .NET está integrada en el framework, se basa en roles y soporta múltiples métodos de autenticación como Windows Authentication, JWT y OAuth.

---

## 5. Comparativa Java EE y .NET

Tanto Java EE como .NET son plataformas empresariales maduras con componentes equivalentes. Java EE usa JPA e Hibernate para la persistencia; .NET usa Entity Framework. Java EE usa Spring Security para la seguridad; .NET tiene seguridad integrada. El lenguaje principal de Java EE es Java; el de .NET es C#. Java EE se ejecuta en la JVM; .NET se ejecuta en el CLR. Ambas son multiplataforma en sus versiones modernas.

---

## 6. Desarrollo de interfaces

Las tecnologías de desarrollo de interfaces se dividen en front-end y back-end.

El front-end es la parte que se ejecuta en el navegador del usuario. Se desarrolla con HTML para la estructura del contenido, CSS para la presentación y el diseño, y JavaScript para el comportamiento y la interactividad. Los frameworks de front-end más usados son Angular, React y Vue.

La comunicación entre cliente y servidor se realiza principalmente mediante llamadas HTTP con intercambio de datos en formato JSON para las APIs REST o XML para los servicios SOAP.

---

## Miniresumen final del tema

Jakarta EE es la plataforma empresarial Java que se ejecuta sobre servidores de aplicaciones como WildFly. Sus APIs principales son Servlet, JSP, EJB, JSF, JPA y JTA. La persistencia en Java usa JDBC para acceso directo o JPA e Hibernate como ORM. .NET es la plataforma de Microsoft con CLR, C#, ASP.NET y Entity Framework. Spring Security y la seguridad declarativa por roles son los enfoques habituales en ambas plataformas.
