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

---

# Esquema resumen

**Java EE / Jakarta EE — APIs principales**

| API | Función |
|---|---|
| **Servlet** | Gestión de peticiones HTTP |
| **JSP** | Páginas HTML con Java incrustado |
| **EJB** | Componentes de lógica de negocio |
| **JSF** | Framework de interfaces web por componentes |
| **JPA** | Persistencia estándar (ORM) |
| **JTA** | Transacciones distribuidas (ACID) |
| **CDI** | Inyección de dependencias |

**Persistencia en Java**

| Tecnología | Tipo | Características |
|---|---|---|
| **JDBC** | Acceso directo SQL | Control total; mucho código manual |
| **JPA** | API estándar ORM | Mapeo objeto-relacional con anotaciones |
| **Hibernate** | Implementación JPA | ORM más popular; JPQL |

**Plataforma .NET — Equivalencias con Java EE**

| .NET | Java EE |
|---|---|
| CLR | JVM |
| C# | Java |
| ASP.NET Core | Servlet + Spring MVC |
| ADO.NET | JDBC |
| Entity Framework | JPA + Hibernate |

**Desarrollo de interfaces**

- Front-end: HTML, CSS, JavaScript
- Frameworks: Angular, React, Vue
- Comunicación: REST (JSON) / SOAP (XML)


# 1. Arquitectura Java EE / Jakarta EE

## 1.1 Definición y origen

**Java EE (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
- Escalables

Se ejecuta sobre un **servidor de aplicaciones** que implementa las APIs de la especificación.

---

## 1.2 Servidor de aplicaciones

Software que proporciona los servicios de infraestructura necesarios a las aplicaciones empresariales.

**Funciones:**
- Ejecución de aplicaciones web (Servlets, JSP…)
- Gestión de transacciones
- Seguridad
- Pool de conexiones a base de datos
- Gestión de sesiones y clustering

**Servidores de aplicaciones Jakarta EE:**

| Servidor | Fabricante | Licencia |
|---|---|---|
| **WildFly** (antes JBoss) | Red Hat | Open source |
| **GlassFish** | Eclipse Foundation | Open source |
| **WebLogic** | Oracle | Comercial |
| **WebSphere** | IBM | Comercial |
| **TomEE** | Apache | Open source |

> **Nota:** Apache Tomcat **no es** un servidor Jakarta EE completo; solo implementa Servlets y JSP.

---

## 1.3 APIs principales

### Servlet

Componente Java que gestiona peticiones y respuestas HTTP.

- Métodos soportados: `GET`, `POST`, `PUT`, `DELETE`, `HEAD`, `OPTIONS`
- Ciclo de vida: `init()` → `service()` → `destroy()`
- Base del desarrollo web en Java

```
Cliente → petición HTTP → Servlet → procesa → respuesta HTTP → Cliente
```

---

### JSP (JavaServer Pages)

Páginas HTML con código Java incrustado que se compilan a un Servlet en el servidor.

- Etiquetas especiales: `<% %>` (scriptlet), `<%= %>` (expresión), `<%! %>` (declaración)
- Uso disminuido en favor de Thymeleaf, FreeMarker, etc.

---

### EJB (Enterprise JavaBeans)

Componentes de lógica de negocio con servicios gestionados automáticamente por el contenedor.

| Tipo | Descripción |
|---|---|
| **Session Bean Stateless** | Sin estado entre llamadas; escalable |
| **Session Bean Stateful** | Mantiene estado para un cliente concreto |
| **Message-Driven Bean** | Procesa mensajes asíncronos (JMS) |

---

### JSF (JavaServer Faces)

Framework estándar de Jakarta EE para interfaces web basadas en **componentes**. Sigue el patrón MVC.

---

### JPA (Java Persistence API)

API estándar para la **persistencia de objetos** en bases de datos relacionales.

- Mapea clases Java a tablas mediante anotaciones.
- Consultas en **JPQL** (orientado a objetos) o Criteria API.
- Implementaciones: **Hibernate** (la más usada), EclipseLink, OpenJPA.

**Anotaciones básicas:**

| Anotación | Uso |
|---|---|
| `@Entity` | Marca la clase como entidad persistente |
| `@Table(name="...")` | Nombre de la tabla |
| `@Id` | Clave primaria |
| `@GeneratedValue` | Generación automática del ID |
| `@Column` | Mapeo de columna |
| `@OneToMany`, `@ManyToOne`, `@ManyToMany` | Relaciones entre entidades |

---

### JTA (Java Transaction API)

Gestión de **transacciones distribuidas**. Garantiza las propiedades **ACID**:

| Propiedad | Descripción |
|---|---|
| **Atomicidad** | Toda la transacción se ejecuta o ninguna parte |
| **Consistencia** | La BD pasa de un estado válido a otro |
| **Aislamiento** | Las transacciones concurrentes no se interfieren |
| **Durabilidad** | Los cambios confirmados son permanentes |

---

### CDI (Contexts and Dependency Injection)

Framework de inyección de dependencias de Jakarta EE.

- Gestiona el ciclo de vida de los objetos (beans).
- Permite inyectar dependencias mediante `@Inject`.
- Favorece bajo acoplamiento.

---

### Miniresumen

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

---

# 2. Persistencia en Java

## 2.1 JDBC y patrón DAO

**JDBC (Java Database Connectivity)** es la API estándar de Java para el acceso directo a bases de datos relacionales mediante SQL.

Pasos de uso:
1. Cargar el driver del SGBD.
2. Establecer la conexión (`DriverManager.getConnection()`).
3. Crear un `Statement` o `PreparedStatement`.
4. Ejecutar la consulta SQL.
5. Procesar el `ResultSet`.
6. Cerrar la conexión.

| | JDBC |
|---|---|
| **Ventajas** | Control total sobre el SQL; rendimiento máximo |
| **Inconvenientes** | Código repetitivo (boilerplate); acoplamiento al SGBD |

**Patrón DAO (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

**ORM (Object-Relational Mapping):** técnica que mapea el modelo de objetos con el modelo relacional.

| Concepto relacional | Concepto OO |
|---|---|
| Tabla | Clase |
| Fila (registro) | Objeto (instancia) |
| Columna (campo) | Atributo |
| Clave primaria | Identificador (`@Id`) |
| Clave foránea | Referencia a otro objeto |

**JPA** es la especificación estándar. **Hibernate** es su implementación más popular.

**JPQL (Java Persistence Query Language):**
- Similar a SQL pero orientado a objetos.
- Opera sobre entidades y atributos, no sobre tablas y columnas.

```java
// JPQL
SELECT e FROM Empleado e WHERE e.departamento.nombre = :dept

// SQL equivalente
SELECT * FROM empleados e JOIN departamentos d ON e.dept_id = d.id WHERE d.nombre = ?
```

**Spring Data JPA:** genera automáticamente las consultas a partir del nombre del método.

```java
List<Empleado> findByDepartamentoNombre(String nombre);
```

**Documentación:**
- **JavaDoc**: documentación del código Java.
- **Swagger / OpenAPI**: documentación de APIs REST.

---

### Miniresumen

La persistencia en Java usa **JDBC** para acceso SQL directo o **JPA/Hibernate** (ORM) para mapeo objeto-relacional. 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

| Tipo | Mecanismo | Cuándo usarlo |
|---|---|---|
| **Declarativa** | Anotaciones (`@RolesAllowed`, `@PermitAll`, `@DenyAll`) o ficheros de config | Lógica simple basada en roles |
| **Programática** | Código Java (`SecurityContext`, `isUserInRole()`) | Lógica de seguridad compleja |

---

## 3.2 Spring Security

Framework de seguridad estándar de facto en el ecosistema Java.

**Funcionalidades:**
- **Autenticación**: verificar la identidad (usuario + contraseña, JWT, OAuth2…)
- **Autorización**: controlar el acceso según roles o permisos
- **Protección CSRF**: evita ataques de falsificación de solicitudes entre sitios
- **Gestión de sesiones**
- **Cifrado de contraseñas**: BCrypt, Argon2…

**Mecanismos de autenticación soportados:**

| Mecanismo | Descripción |
|---|---|
| Form Login | Formulario HTML clásico |
| HTTP Basic | Cabecera `Authorization: Basic ...` |
| **JWT** | Token firmado sin estado (stateless) |
| **OAuth2 / OIDC** | Delegación a proveedor externo (Google, GitHub…) |
| LDAP | Directorio corporativo |

---

### Miniresumen

La seguridad en Java EE puede ser **declarativa** (anotaciones) o **programática** (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.

**Evolución:**
- **.NET Framework** (2002): solo Windows.
- **.NET Core** (2016): multiplataforma (Windows, Linux, macOS).
- **.NET 5+** (2020): unificación bajo el nombre ".NET".

**Componentes principales:**

| Componente | Descripción | Equivalente Java EE |
|---|---|---|
| **CLR** (Common Language Runtime) | Máquina virtual; ejecuta código IL | JVM |
| **BCL** (Base Class Library) | Librerías base del framework | Java SE |
| **ASP.NET Core** | Framework web | Servlet + Spring MVC |
| **Entity Framework Core** | ORM | JPA + Hibernate |

**Proceso de compilación:**
```
Código C# → compilador → IL (Intermediate Language) → CLR (JIT) → código nativo
```

---

## 4.2 Lenguajes de .NET

Todos compilan a **IL** y se ejecutan en el CLR:

| Lenguaje | Paradigma | Uso principal |
|---|---|---|
| **C#** | Orientado a objetos | Aplicaciones empresariales, web, escritorio |
| **VB.NET** | Orientado a objetos | Aplicaciones legacy Windows |
| **F#** | Funcional | Análisis de datos, computación científica |

---

## 4.3 Persistencia en .NET

**ADO.NET:**
- Acceso directo a bases de datos mediante SQL.
- Equivalente a JDBC.
- Clases: `SqlConnection`, `SqlCommand`, `SqlDataReader`, `DataSet`.

**Entity Framework (EF Core):**
- ORM de .NET; equivalente a JPA + Hibernate.
- Tres enfoques:
  - **Code First**: se definen las clases; EF genera la BD.
  - **Database First**: se parte de la BD existente; EF genera las clases.
  - **Model First**: se diseña el modelo visual; EF genera BD y clases.
- Consultas con **LINQ (Language Integrated Query)**: tipadas directamente en C#.

```csharp
var empleados = context.Empleados
    .Where(e => e.Departamento.Nombre == "TIC")
    .OrderBy(e => e.Apellidos)
    .ToList();
```

---

## 4.4 Seguridad en .NET

- Integrada en ASP.NET Core mediante middleware.
- Basada en **claims** y **roles**.

| Método | Descripción |
|---|---|
| Windows Authentication | Integración con Active Directory / dominio |
| **JWT** | Token sin estado; estándar en APIs REST |
| **OAuth2 / OpenID Connect** | Delegación a proveedor externo |
| Cookie Authentication | Sesión basada en cookies |

---

### Miniresumen

.NET es la plataforma de Microsoft, multiplataforma desde .NET Core. Componentes clave: **CLR** (máquina virtual), **ASP.NET Core** (web), **ADO.NET** (SQL directo) y **Entity Framework** (ORM). Lenguaje principal: **C#**.

---

# 5. Comparativa Java EE vs .NET

| Característica | Java EE / Jakarta EE | .NET (Core / 5+) |
|---|---|---|
| **Gestor** | Eclipse Foundation | Microsoft |
| **Lenguaje principal** | Java | C# |
| **Máquina virtual** | JVM | CLR |
| **Servidor web** | WildFly, GlassFish, Tomcat | Kestrel, IIS |
| **Framework web** | Spring MVC, JSF | ASP.NET Core |
| **ORM** | JPA / Hibernate | Entity Framework Core |
| **Acceso SQL directo** | JDBC | ADO.NET |
| **Seguridad** | Spring Security | ASP.NET Core Identity |
| **Inyección de dependencias** | CDI, Spring DI | DI nativo en ASP.NET Core |
| **Multiplataforma** | Sí (JVM) | Sí (desde .NET Core) |
| **Licencia** | Open source (mayoría) | Open source (MIT) |

> **Conclusión:** ambas son plataformas empresariales equivalentes. La elección depende del ecosistema y el perfil del equipo.

---

# 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.

**Tecnologías base:**

| Tecnología | Función |
|---|---|
| **HTML** | Estructura y contenido de la página |
| **CSS** | Presentación y diseño visual |
| **JavaScript** | Comportamiento e interactividad |

**Frameworks de front-end:**

| Framework | Fabricante | Paradigma |
|---|---|---|
| **Angular** | Google | Framework completo (TypeScript) |
| **React** | Meta | Librería de UI (JSX) |
| **Vue** | Comunidad | Framework progresivo |

---

## 6.2 Comunicación cliente-servidor

**Protocolo:** HTTP / HTTPS.

**Arquitecturas de API:**

| Arquitectura | Formato | Características |
|---|---|---|
| **REST** | JSON | Sin estado; orientado a recursos; HTTP nativo |
| **SOAP** | XML | Protocolo formal con WSDL; entornos corporativos |
| **GraphQL** | JSON | El cliente especifica exactamente los datos que necesita |
| **WebSocket** | Binario / texto | Comunicación bidireccional en tiempo real |

---

## 6.3 Tipos de aplicaciones web

| Tipo | Descripción | Tecnología |
|---|---|---|
| **MPA** (Multi-Page Application) | Cada acción genera una página nueva desde el servidor | Thymeleaf, JSP, Razor |
| **SPA** (Single-Page Application) | Una sola página; contenido actualizado dinámicamente | Angular, React, Vue |
| **PWA** (Progressive Web App) | SPA con capacidades offline y notificaciones push | Service Workers |
| **SSR** (Server-Side Rendering) | El servidor renderiza la página inicial | Next.js, Nuxt.js |

---

### Miniresumen

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 mediante **APIs REST con JSON** sobre HTTPS. Las SPA son el modelo más habitual en aplicaciones modernas.

---

# Miniresumen final del tema

| Punto | Idea clave |
|---|---|
| **1. Java EE / Jakarta EE** | Plataforma empresarial Java; APIs: Servlet, JSP, EJB, JSF, JPA, JTA, CDI |
| **2. Persistencia en Java** | JDBC (SQL directo) o JPA/Hibernate (ORM); consultas en JPQL |
| **3. Seguridad Java EE** | Declarativa (anotaciones) o programática; Spring Security: autenticación, autorización, JWT, OAuth2 |
| **4. .NET** | Plataforma Microsoft; CLR, C#, ASP.NET Core, Entity Framework (EF Core) |
| **5. Comparativa** | Plataformas equivalentes; Java EE usa JVM y Spring; .NET usa CLR y ASP.NET Core |
| **6. Interfaces** | HTML + CSS + JS; frameworks Angular/React/Vue; comunicación REST/JSON |