Arquitectura JPA (Java Persistence API)
La persistencia de datos es la posibilidad de mantener los datos entre ejecuciones de la aplicación. La persistencia es vital en las aplicaciones empresariales debido a la necesidad de acceder a bases de datos relacionales. Las aplicaciones desarrolladas para este entorno deben gestionar ellas mismas la persistencia o utilizar soluciones de terceros para manejar las actualizaciones y recuperaciones de las bases de datos con persistencia. La Java™ Persistence API (JPA) proporciona un mecanismo para gestionar la persistencia y la correlación relacional de objetos y las funciones para las especificaciones EJB.
La especificación JPA define la correlación relacional de objetos internamente, en lugar de basarse en implementaciones de correlación específicas del proveedor. JPA se basa en el modelo de programación Java que se aplica a los entornos Java EE, pero JPA puede funcionar dentro de un entorno Java SE para probar funciones de la aplicación.
- La API EntityManager puede persistir, actualizar, recuperar o eliminar objetos de una base de datos
- La API EntityManager y los metadatos de correlación relacional de objetos manejan la mayoría de las operaciones de base de datos sin que sea necesario que se escriba código JDBC o SQL para mantener la persistencia
- JPA proporciona un lenguaje de consulta, ampliando el lenguaje de consulta EJB independiente (también denominado JPQL), que se puede utilizar para recuperar objetos sin escribir consultas SQL específicas de la base de datos con la que está trabajando.
JPA está diseñado para funcionar dentro y fuera de un contenedor Java Enterprise Edition (Java EE). Cuando se ejecuta JPA dentro de un contenedor, las aplicaciones pueden utilizar el contenedor para gestionar el contexto de persistencia. Si no ha ningún contenedor para gestionar JPA, la aplicación debe manejar ella misma la gestión del contexto de persistencia. Las aplicaciones diseñadas para la persistencia gestionada por contenedor no requieren tanta implementación de código para manejar la persistencia, pero estas aplicaciones no se pueden utilizar fuera de un contenedor. Las aplicaciones que gestionan su propia persistencia pueden funcionar en un entorno de contenedor o en un entorno Java SE.
- Unidad de persistencia
- Consta de los metadatos de declaración que describen la relación de los objetos de clase de entidad con una base de datos relacional. EntityManagerFactory utiliza estos datos para crear un contexto de persistencia al que se puede acceder mediante EntityManager.
- EntityManagerFactory
- Se utiliza para crear un EntityManager para las interacciones de base de datos. Los contenedores del servidor de aplicaciones normalmente proporcionan esta función, pero es necesario EntityManagerFactory si se utiliza la persistencia gestionada por las aplicaciones JPA. Una instancia de un EntityManagerFactory representa un contexto de persistencia.
- Contexto de persistencia
- Define el conjunto de las instancias activas que la aplicación está manipulando actualmente. El contexto de persistencia se puede crear manualmente o mediante inyección.
- EntityManager
- Gestor de recursos que mantiene la colección activa de
objetos de entidad que está utilizando la aplicación. EntityManager
maneja la interacción y metadatos de bases de datos para las correlaciones relacionales
de objetos.
Una instancia de un EntityManager representa un contexto de persistencia. Una aplicación
en un contenedor puede obtener el EntityManager mediante inyección en la aplicación o
buscándolo en el espacio de nombres del componente Java. Si la aplicación gestiona su
persistencia, el EntityManager se obtiene desde EntityManagerFactory. Atención: Sólo se da soporte a la inyección del EntityManager para los artefactos siguientes:
- Beans de sesión EJB 3.x
- Beans controlados por mensajes EJB 3.x
- Servlets, filtros de servlet y escuchas
- Manejadores de distintivos JSP que implementan interfaces javax.servlet. jsp.tagext.Tag y javax.servlet.jsp.tagext.SimpleTag
- Beans gestionados JSF (JavaServer Faces)
- La clase principal del cliente de aplicaciones.
- Objetos de entidad
- Clase Java simple que representa una fila en una tabla de base de datos con su formato más sencillo. Los objetos de entidades pueden ser clases concretas o clases abstractas. Mantienen estados mediante la utilización de propiedades o campos.