JPA

RECU-0096 (Recurso Ficha Técnica)

Descripción

Java Persistence API (JPA) proporciona un modelo de persistencia basado en POJO's para mapear bases de datos relacionales en Java. El Java Persistence API fue desarrollado por el grupo de expertos de EJB 3.0 como parte de JSR 220, aunque su uso no se limita a los componentes software EJB. También puede utilizarse directamente en aplicaciones web y aplicaciones clientes; incluso fuera de la plataforma Java EE, por ejemplo, en aplicaciones Java SE.

En su definición, se han combinado ideas y conceptos de los principales frameworks de persistencia como Hibernate, Toplink y JDO, y de las versiones anteriores de EJB. Todos estos cuentan actualmente con una implementación JPA.

El mapeo objeto/relacional, es decir, la relación entre entidades Java y tablas de la base de datos, se realiza mediante anotaciones en las propias clases de entidad, por lo que no se requieren ficheros descriptores XML. También pueden definirse transacciones como anotaciones JPA.

Java Persistence API consta de tres áreas:

  • El Java Persistence API
  • El lenguaje de query
  • El mapeo de los metadatos objeto/relacional

Ventajas e inconvenientes

  1. Utilizar un framework de ORM simplifica enormemente la programación de la lógica de persistencia. Se trata de una idea completamente madura que cada vez se vuelve más popular. En aplicaciones donde la lógica de negocios trabaja contra un modelo de dominio completamente orientado a objetos la generación de código se reduce entre un 30% y un 40%. Además el código generado suele ser mucho más sencillo y mantenible.
  2. Es fundamental conocer bien cómo funcionan las tecnologías que se utilizan ya que dependiendo de cómo se realicen las cosas podrá afectar directamente al rendimiento de la aplicación. Esto no quiere decir que el uso de JPA sea desaconsejable, sino todo lo contrario, proporciona grandes beneficios como es la independencia de la base de datos, bajo acoplamiento entre negocio y persistencia, y un desarrollo rápido. Esto permite centrar los esfuerzos en optimizar las consultas que realmente lo merecen.
  3. Para obtener el mejor rendimiento de JPA, es importante entender los parámetros de tunning incluídos en la implementación de la JPA. La configuración de la caché es un parámetro importante de tunning. Ajustar el pool de conexiones también es importante para obtener el mejor rendimiento de cualquier implementación de JPA.
  4. Si se utiliza JPA fuera del contenedor EJB, la caché y el pool de conexiones también juegan un papel importante en el rendimiento, aunque en este caso se configura el pool en el fichero persistence.xml.
  5. Hay otros parámetros que pueden impactar en el rendimiento de JPA. Uno es el statement cache. Éste se debe especificar explícitamente para algunas bases de datos como Oracle. Además, la configuración de la Java Virtual Machine (JVM) puede jugar un rol importante en el ajuste de la persistencia. Para tener información detallada del ajuste de la JVM, véase el Java Tuning White Paper. Para la ejecución de la aplicación de este tip, las opciones de la JVM las pondremos así:
-server -XX:+AggressiveHeap -Xmx2500m -Xms2500m -Xss128k
-XX:+DisableExplicitGC

Requisitos e incompatibilidades

JPA ha sido definida como parte de la especificación EJB 3.0 de Java EE 5, que supone una simplificación sobre versiones anteriores, por lo que ya no requiere de un contenedor EJB ni un servidor de aplicaciones Java EE. Esto implica que no podrá utilizarse en versiones anteriores de Java.

Interacciones

Muchos de los desarrolladores de Java que han utilizado objetos persistente que proporcionaban los marcos de código abierto o DAO's en lugar de Entity Beans e Enterprise Beans fue porque eran considerados demasiado pesados y complicados de utilizar. Además, estos últimos sólo podían utilizarse en servidores de aplicaciones Java EE. Muchas de las características de la persistencia de otros frameworks se incorporaron a la Java Persistence API, y proyectos como Hibernate y TopLink son ahora implementaciones de Java Persistence API (JPA).

Hibernate

La versión 3.2.0 Hibernate desarrolla la especificación JPA, con lo que ahora es posible desarrollar una capa de acceso a datos compatible con los estándares de Java en hibernate, y desplegarla en cualquier servidor de aplicaciones que soporte las especificaciones JEE5.

TopLink es una implementación del EJB 3.0 JPA (Java Persistence API). Es una versión limitada del propietario del producto, por ejemplo, TopLink no proporciona sincronización de la caché entre la agrupación de las aplicaciones, la política de validaciones y la caché de consultas.

EJB

JPA se definió como parte de la especificación EJB 3.0 que es a su vez parte de la plataforma Java EE 5. No se utiliza un contenedor de EJB's, ni tampoco un servidor de aplicaciones Java EE con el fin de ejecutar aplicaciones que utilizan persistencia.