En el momento de escribir este libro, Jakarta EE se encuentra disponible en su versión 8.
Figura 1.1 Evolución de Java EE.
La Figura 1.2 Figura 1.2 APIs que componen Jakarta EE. Para desarrollar proyectos con Jakarta EE, utilizaremos la siguiente dependencia Maven: Encontrará el listado completo de APIs y su descripción en la siguiente dirección URL: https://jakarta.ee/specifications/
muestra las diferentes APIs que componen Jakarta EE 8, entre las que podemos destacar: JSF (para el desarrollo de aplicaciones web), JAX-RS (para construir servicios web RESTful), JSON-P (para manipular datos en formato JSON), CDI (para acceder a recursos del servidor mediante JNDI), EJB (para implementar componentes de negocio), JTA (para el manejo de transacciones) y JPA (para interactuar con bases de datos relacionales).

Figura 1.2 APIs que componen Jakarta EE.
Para desarrollar proyectos con Jakarta EE, utilizaremos la siguiente dependencia Maven:
Encontrará el listado completo de APIs y su descripción en la siguiente dirección URL: https://jakarta.ee/specifications/
Por razones de espacio no cubriremos todas las APIs y solo nos centraremos en aquellas que consideramos esenciales para el desarrollo de aplicaciones empresariales.
La Figura 1.3 Figura 1.3 Resumen de las APIs que estudiaremos.
muestra cuáles son las APIs que estudiaremos en este libro.

Figura 1.3 Resumen de las APIs que estudiaremos.
1.4 Desarrollo de aplicaciones en capas
A la hora de desarrollar una aplicación, nos enfrentamos al concepto de programación en capas, cuyo objetivo principal es separar las diferentes partes que componen la aplicación. Estas capas pueden ser lógicas o físicas. Sznajdleder (2013) afirma: “(…) una capa es física cuando esta tiene la capacidad de poder ser ejecutada en su propio host (computadora conectada a la red)”.
A partir de dicha afirmación, diremos que en este libro todos los ejemplos están desarrollados siguiendo el esquema de capas lógicas, es decir, un proyecto dividido en varios paquetes, en el que cada paquete tiene a su cargo la implementación de una pequeña porción de la funcionalidad total del proyecto.
Describiremos la responsabilidad de cada capa adoptando un enfoque ascendente: comenzaremos por las capas de datos y el acceso a ellos, seguiremos por la de negocio y, por último, nos enfocaremos en la capa de presentación.
Esta capa se implementa con una base de datos, cuya responsabilidad es garantizar la persistencia de los datos y proveer un mecanismo para realizar distintas operaciones, tales como: inserción, actualización, eliminación y búsqueda, entre otras.
1.4.2 Capa de acceso a datos
Esta capa se encarga de encapsular los accesos a la base de datos. Las operaciones de inserción, modificación, eliminación, búsquedas y demás las realizaremos en esta capa.
Esta capa es la encargada de resolver la lógica de la aplicación (cálculos, validaciones, procesamiento de eventos).
1.4.4 Capa de presentación
Esta capa es la encargada de interactuar con el usuario final de la aplicación y con la capa de negocio.
Para comprender un poco mejor la organización en capas de una aplicación, pensemos en la siguiente situación: imagine un sitio web de comercio electrónico que en su página principal exhibe un catálogo de productos que gozan de un descuento del 30 %.
Antes que nada, los productos deben estar almacenados en una base de datos (capa de datos), luego se deben obtener, mediante algún proceso, aquellos productos que tengan descuento (capa de acceso a datos y capa de negocio) y, por último, se deben exponer en la página principal del sitio (capa de presentación).
Figura 1.4 Desarrollo de una aplicación en capas lógicas.
Jakarta EE provee tecnologías para cada una de estas capas. Por ejemplo, en la capa de presentación se puede utilizar Jakarta Server Faces (JSF); en la capa de negocio, Jakarta Enterprise Beans (EJB) y, finalmente, en la capa de acceso a datos, Jakarta Persistence API (JPA). Obviamente, además de las tecnologías mencionadas, intervienen otras en menor medida, aunque no por ello son menos importantes.
En este capítulo presentamos una introducción a Jakarta EE e hicimos un breve repaso de su historia, centrándonos en el proceso de evolución de J2EE, que pasó a ser Java EE y se convirtió, finalmente, en Jakarta EE.
Además, mostramos cuáles son las APIs que componen Jakarta EE 8 y definimos cuáles estudiaremos a lo largo de esta obra.
Por último, explicamos cómo desarrollar una aplicación en capas y mencionamos las posibles tecnologías que podrían ser empleadas en cada una de ellas.
2
Persistencia de datos con JPA
A diferencia de las pequeñas aplicaciones que solo trabajan con unos cuantos datos que se mantienen en memoria durante el tiempo de ejecución, las aplicaciones empresariales trabajan con un volumen importante de datos y mantenerlos todos en memoria tendría un coste significativo. Por ello, las aplicaciones empresariales deben disponer de algún mecanismo eficiente para poder almacenarlos y recuperarlos de una base de datos. Ese mecanismo nos los provee Jakarta mediante su API JPA.
JPA puede ser empleada en aplicaciones web y en aplicaciones standalone . Si bien es cierto que este libro tiene como objeto de estudio el contexto web, en este capítulo nos centraremos en aplicaciones simples de consola, para que el lector pueda ir familiarizándose con los conceptos de esta API.
Gran parte del código fuente de los ejemplos aquí desarrollados se encuentra disponible en el repositorio de GitHub, cuya dirección URL es la siguiente: https://github.com/Francisco-Castillo/capitulo-jpa.git
En este capítulo abordaremos los siguientes temas:
* Introducción a JPA
* Arquitectura y componentes
* Mapeo objeto-relacional (ORM)
* Relaciones entre entidades
* Jerarquías
* Lenguaje JPQL
* Operaciones del Entity Manager
* Oyentes (Entity Listeners)
* Criteria API
JPA es la API de persistencia que Jakarta EE provee para almacenar, recuperar y representar los datos que se encuentran almacenados en una base de datos relacional. Se encuentra definida dentro del paquete javax.persistence.
En otras palabras, JPA es un estándar de ORM (mapeo objeto-relacional), y existen múltiples implementaciones, tales como Hibernate, TopLink, EclipseLink y Apache OpenJPA, entre otras.
Читать дальше