You are on page 1of 87

Java Persistence API

Av. Insurgentes Sur 1388 PH 03230, Mxico D.F. (5255) T. 2789 8400 www.ids.com.mx

Ms de 25 aos comprometidos con nuestros clientes, siendo sus socios tecnolgicos. informacin confidencial Direccin de Tecnologa y Calidad

1 1

Java Persistence API


Introduccin QuickStart Object-Relational Mapping Relationships Queries Concurrencia Integracin IDS Framework Cambry Lo que sigue

Agenda

informacin confidencial Direccin de Tecnologa y Calidad

Acerca de mi
[Tu nombre] (T&Q)
Ingeniero en [Software] [00] aos experiencia profesional Plataforma [Java] Java 1.4+ JEE 1.4+ correo@ids.com.mx correo@live.com correo@gmail.com http://linkedin.com/in/correo

informacin confidencial Direccin de Tecnologa y Calidad

Objetivo del Curso


Proveer a los asistentes los fundamentos bsicos y buenas practicas para hacer uso de la tecnologa explicada. Eliminar las malas practicas que constantemente se repiten en los proyectos.

JPA
informacin confidencial Direccin de Tecnologa y Calidad

Conocimientos Necesarios
SQL
DDL DML

JDBC Java 5+ AS(JavaEE6) Windows OS IDE (Eclipse/MyEclipse) UML Patrones de Diseo

informacin confidencial Direccin de Tecnologa y Calidad

Java Persistence API


Introduccin QuickStart Object-Relational Mapping Relationships Queries Concurrencia Integracin IDS Framework Cambry Lo que sigue

Agenda

informacin confidencial Direccin de Tecnologa y Calidad

JPA Intro
Las aplicaciones Empresariales necesitan mantener la informacin en algn lugar. Persistencia
Se refiere a la propiedad de los datos para que estos sobrevivan de alguna manera

informacin confidencial Direccin de Tecnologa y Calidad

JPA Intro
Soluciones
Sistema de Archivos Base de Datos Relacionales ACID

informacin confidencial Direccin de Tecnologa y Calidad

JPA Intro
Modelo de Dominio
Clases Atributos Relaciones

Modelo E-R
Tablas Columnas Relaciones

DAO

informacin confidencial Direccin de Tecnologa y Calidad

JPA Intro
DAO (Data Access Object)
Objeto que proporciona una interface de algn tipo de base de datos o mecanismo de persistencia , proporcionando algunas operaciones especificas sin exponer detalles de la base de datos.

class DAO interface UsuarioDAO Cliente + + + + + delete() :void find() :void getByID() :void save() :void update() :void

UsuarioDAOJDBC + + + + + delete() :void find() :void getByID() :void save() :void update() :void

interface Framew orks:: j av a.sql.Connection

informacin confidencial Direccin de Tecnologa y Calidad

10

JPA Intro
Solucin DAO

informacin confidencial Direccin de Tecnologa y Calidad

11

JPA Intro
ORM (Object-Relational Mapping)
Tcnica de Programacin para convertir datos relacionales en objetos.

informacin confidencial Direccin de Tecnologa y Calidad

12

JPA Intro
Java Persistence API
Estndar de persistencia para aplicaciones JavaEE5+ Framework Persistencia basado en POJOs Componente de Persistencia de EJB

Principales elementos que lo integran:


EntityManager Java Entities persistence.xml

Patrones que implementa y NO necesarios:


DAO /Repositorio DTO / Transformadores

informacin confidencial Direccin de Tecnologa y Calidad

JPA Intro
Java Persistence API

Clases de Dominio

Administrador De Entidades

Mapeo XML @Ann

Base de Datos

informacin confidencial Direccin de Tecnologa y Calidad

JPA Intro
Componentes Java Persistence API
cmp EntityManager

DAO Repository

Serv ice Interface

EntityManager

DataSource

informacin confidencial Direccin de Tecnologa y Calidad

JPA Intro
Implementaciones
OpenJPA http://openjpa.apache.org/
IBM Websphere CE IBM Websphere Server Apache Geronimo Apache TomEE

EclipseLink http://eclipse.org/eclipselink/
Caucho Resin OW2 Jonas Oracle Glassfish Oracle Weblogic

Hibernate http://hibernate.org/
Jboss CE Jboss Enterprise Middleware
informacin confidencial Direccin de Tecnologa y Calidad

16

JPA Intro
EclipseLink 2.3

Soporte JPA 1, 2 Novedades Versin 2


Cache Estandarizacin persistence.xml JavaEE6 Criteria Bean Validator

informacin confidencial Direccin de Tecnologa y Calidad

17

Java Persistence API


Introduccin QuickStart Object-Relational Mapping Relationships Queries Concurrencia Integracin IDS Framework Cambry Lo que sigue

Agenda

informacin confidencial Direccin de Tecnologa y Calidad

18

QuickStart
Requerimientos
JDK6 IDE Eclipse Indigo Base de Datos MySQL SQL Cliente MYSQL WorkBeach JPA EclipseLink JDBC - mysql Material Curso \\smprodtq2\software\JPA

informacin confidencial Direccin de Tecnologa y Calidad

19

QuickStart
Lista de pasos a realizar
1. JDK 6 jdk-6u30-windows-x64.exe 2. IDE eclipse-jee-indigo-SR1-win32-x86_64.zip 3. JPA eclipselink-2.3.1.v20111018-r10243.zip 4. Base de datos mysql-5.5.16-winx64.msi 5. Cliente Base de datos mysql-workbench-gpl-5.2.35-win32.msi 6. JDBC mysql-connector-java-5.1.18.zip

informacin confidencial Direccin de Tecnologa y Calidad

20

QuickStart
JavaProject
Java 6

informacin confidencial Direccin de Tecnologa y Calidad

21

QuickStart
JavaProject JDBC
mysql

EclipseLink
eclipselink.jar javax.persistence

Junit4 (eclipse)

3
informacin confidencial Direccin de Tecnologa y Calidad

22

QuickStart
Configuracin JPA Standalone
Transaccin Local Proveedor Conexin Base de Datos Entidades

informacin confidencial Direccin de Tecnologa y Calidad

23

QuickStart
Configuracin JPA AS
Transaccin JTA DataSource AS Entidades (opcional)

informacin confidencial Direccin de Tecnologa y Calidad

24

QuickStart
Entity JPA
Java Class javax.persitence

informacin confidencial Direccin de Tecnologa y Calidad

25

QuickStart
JPA Entity Manager javax.persistence.EntityManager

cmp EntityManager

DAO Repository

Serv ice Interface

EntityManager

DataSource

informacin confidencial Direccin de Tecnologa y Calidad

26

QuickStart
Salvar
em.persist(pojo); SQL Insert

Buscar por ID
Pojo pojo = em.find(Pojo.class,999); SQL Select

informacin confidencial Direccin de Tecnologa y Calidad

27

QuickStart
Eliminar
entityManager.remove(pojo); SQL delete

Actualizar
entityManager.merge(pojo); SQL Update

informacin confidencial Direccin de Tecnologa y Calidad

28

QuickStart
Ejercicios
1. Revisar la case: mx.ids.training.EntityManagerHelper 2. Ejecutar la prueba unitaria de: mx.ids.training.TestEntityManager

informacin confidencial Direccin de Tecnologa y Calidad

29

Java Persistence API


Introduccin QuickStart Object-Relational Mapping Relationships Queries Concurrencia Integracin IDS Framework Cambry Lo que sigue

Agenda

informacin confidencial Direccin de Tecnologa y Calidad

30

Object-Relational Mapping
Mapear Entidades con anotaciones.
Son relativamente mas fciles de usar y entender. Proporcionan datos al momento de estar codificando en un IDE. Cambiar los metadatos requiere modificar el cdigo fuente.

informacin confidencial Direccin de Tecnologa y Calidad

31

Object-Relational Mapping
Mapear Entidades con XML.
No esta acoplado los metadatos del cdigo fuente. 100% Soportado a partir de EJB 3 Soportado en la mayora de los IDEs. Complejidad. Se necesita la replicacin del cdigo fuente.

informacin confidencial Direccin de Tecnologa y Calidad

32

Object-Relational Mapping
Entidad
Un Objeto que no es definido por sus atributos, sino mas bien por su

identidad.

Representa una tabla de una base de datos relacional, y cada instancia (objeto) de la entidad representa un rengln de la tabla

informacin confidencial Direccin de Tecnologa y Calidad

33

Object-Relational Mapping
Mapear una Entidad
Field Access Getter & Setter no requeridos Property Access JavaBean Mezclado (2.0)

informacin confidencial Direccin de Tecnologa y Calidad

34

Object-Relational Mapping
Mapear una Entidad
Requerido @Entity @Id (PK) Opcional @Table @Column

informacin confidencial Direccin de Tecnologa y Calidad

35

Object-Relational Mapping
ID
Por cada entidad, debes utilizar uno de los siguientes: @Id @EmbeddedId Multipes @Id y un @IdClass

informacin confidencial Direccin de Tecnologa y Calidad

36

Object-Relational Mapping
@IdClass. Composicin de un ID
POJO Clase Publica Constructor sin argumentos hashCode & equals (Utilizar IDE, eje) Nombres de atributos iguales en ID y Entidad

informacin confidencial Direccin de Tecnologa y Calidad

37

Object-Relational Mapping
@ EmbeddedId. Composicin incrustada de ID
POJO Clase Publica Constructor sin argumentos hashCode & equals (Utilizar IDE, eje) Nombres de atributos iguales en ID y Entidad

informacin confidencial Direccin de Tecnologa y Calidad

38

Object-Relational Mapping
Generacin del ID de la Entidad @GeneratedValue
IDENTITY

SEQUENCE

informacin confidencial Direccin de Tecnologa y Calidad

39

Object-Relational Mapping
Mapeo de simples tipos Java
Primitivas: byte, int, short, long, char Wrappers : Byte, Integer, Short, Long, Character Arreglos de primitivas y wrappers Strings Tipos nmericos muy grandes java.math.BigInteger Tupos fechas: java.util.Date java.sql.Date java.util.Calendar

informacin confidencial Direccin de Tecnologa y Calidad

40

Object-Relational Mapping
@Column - Mapeo Columnas-Atributos.
Necesario cuando el nombre del atributo de la Entidad es diferente al de la columna de la Tabla

informacin confidencial Direccin de Tecnologa y Calidad

41

Object-Relational Mapping
FetchType. Define estrategias para traer datos de la base de datos.
LAZY EAGER

informacin confidencial Direccin de Tecnologa y Calidad

42

Object-Relational Mapping
Large Objects. Define que una propiedad persistente debe ser almacenada como objetos de gran tamao de base de datos. @Lob
Binarios Caracteres

informacin confidencial Direccin de Tecnologa y Calidad

43

Object-Relational Mapping
Temporal Types. Conjunto de tipos que almacenan el tiempo y pueden ser utilizados para persistir. @Temporal
DATE - Fecha TIME - Hora TIMESTAMP Fecha y Hora

Atributos Soportados
java.sql.Date java.sql.Time java.sql.Timestamp java.util.Date java.util.Calendar

informacin confidencial Direccin de Tecnologa y Calidad

44

Object-Relational Mapping
Ejercicio
Realizar el Mapeo va @anotaciones JOBS REGIONS COUNTRIES LOCATIONS Crear una prueba unitaria

informacin confidencial Direccin de Tecnologa y Calidad

45

Java Persistence API


Introduccin QuickStart Object-Relational Mapping Relationships Queries Concurrencia Integracin IDS Framework Cambry Lo que sigue

Agenda

informacin confidencial Direccin de Tecnologa y Calidad

46

Relationships
Relacin Many-to-one
@ManyToOne FetchType Lazy @JoinColumn. FK Atributo tipo Entidad (Deparment)

informacin confidencial Direccin de Tecnologa y Calidad

47

Relationships
Relacin One-to-one
@OneToOne FetchType Lazy @JoinColumn. FK Atributo tipo Entidad (Deparment)

informacin confidencial Direccin de Tecnologa y Calidad

48

Relationships
Relacin bidireccional One-to-One
@OnetoOne FetchType Lazy Parametro mappedBy debe ser el nombre del atributo con el que fue mapeado.

informacin confidencial Direccin de Tecnologa y Calidad

49

Relationships
Relacin (bidireccional) One-to-Many
@OnetoMany FetchType Lazy Parametro mappedBy debe ser el nombre del atributo con el que fue mapeado.

informacin confidencial Direccin de Tecnologa y Calidad

50

Relationships
Ejercicio
Realizar los mapeos @ManytoOne, @OneToOne, y bidireccionales. COUNTRIES DEPARTMENTS JOBS LOCATIONS REGIONS

informacin confidencial Direccin de Tecnologa y Calidad

51

Java Persistence API


Introduccin QuickStart Object-Relational Mapping Relationships Queries Concurrencia Integracin IDS Framework Cambry Lo que sigue

Agenda

informacin confidencial Direccin de Tecnologa y Calidad

52

Querys
SQL Nativo Criteria Java Persistence Query Language
entityManager.createQuery(jpql); entityManager.createNamedQuery(nombre.logico);

informacin confidencial Direccin de Tecnologa y Calidad

53

JPQL
Sentencia select
entidades atributos Instancias de clases no mapeadas
Propiedad de Entidad

Alias

Entidad

informacin confidencial Direccin de Tecnologa y Calidad

54

JPQL
JOINS
Un join es una consulta que combina el resultado de mltiples entidades.

Cuando sucede un JOIN en JPQL


Cuando dos o mas declaraciones de variables aparecen tanto en la clausula FROM como SELECT. Cuando el operador JOIN es usado para extender una variable utilizando una expresin. En la clausula WHERE se comparan atributos de diferentes entidades.

Entidad A

Entidad B

informacin confidencial Direccin de Tecnologa y Calidad

55

JPQL
INNER JOIN. Las dos entidades son requeridas
SELECT [DISTINCT] a FROM EntidadA a [INNER] JOIN a.B b
a1 a1 b1 b2 b3 b8 b9 b10

a1 a2 a2 a2

a1

b1 a1 b2 b3 a1 b1 b2 b3 b1 b2 b3 b1 b2 b3 a2 b8 b9 b10 b8 b9 b10 b8 b9 b10


56

a2

a2

b8 b9 b10 a1

a2

informacin confidencial Direccin de Tecnologa y Calidad

JPQL
OUTER JOIN . Solo una entidad es requerida
SELECT a FROM EntidadA a LEFT [OUTER] JOIN a.B b

a1

b1 b2 b3 b4

a1

b1 a2 b2 b6 b3 a3 b7 b8 b9 b9 b5

a2

b8

a3

b10 b10

informacin confidencial Direccin de Tecnologa y Calidad

57

JPQL
FETCH. Optimizan el acceso a la base de datos
LAZY EAGER
SELECT a FROM EntidadA a LEFT JOIN FETCH a.B b

a1

b1
b2

b3
a2 b8 b9 a3 b10

informacin confidencial Direccin de Tecnologa y Calidad

58

JPQL
WHERE. Utilizada para especificar condiciones de filtrado.
SELECT a FROM EntidadA a WHERE a.name = Transcend

informacin confidencial Direccin de Tecnologa y Calidad

59

JPQL
Subqueries. Es una completa consulta dentro de un par de parntesis.
Utilizado en WHERE, HAVING Tipo de resultado escalar(nico) coleccin de valores.

ESCALAR

COLECCION SELECT e FROM Employee e WHERE EXISTS ( SELECT 1 FROM Phone p WHERE p.employee = e AND p.type=CELL)

SELECT e FROM Employee e WHERE e.salary = (SELECT MAX(emp.salary)/2 FROM Employeee emp)

select e from Employee e where e.salary = 390

Aggretate Query

Subquery NO Correlacionado Una sola ejecucin

Subquery Correlacionado

N ejecuciones
60

informacin confidencial Direccin de Tecnologa y Calidad

JPQL
IN. Utilizado para verificar si un valor es miembro de una colecin.
SELECT e FROM Employee e WHERE e.address.state IN (DF,MX)

Funciones.
ABS(number) CONCAT(string1, string2) CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP INDEX(identification variable) LENGTH(string) LOWER(string) MOD(number1, number2) SIZE(collection) SQRT(number) SUBSTRING(string, start, end) UPPER(string)

informacin confidencial Direccin de Tecnologa y Calidad

61

JPQL
Consultas Agregadas. Variacin de una consulta normal.
Agrupa el resultado y aplica una funcin para obtener informacin resumida de la consulta. GROUP BY HAVING
SELECT AVG(e.salary) FROM Employee e SELECT d.name, AVG(e.salary) FROM Department d JOIN d.employees e GROUP BY d.name

Pro 5900
SELECT d.name, AVG(e.salary) FROM Department d JOIN d.employees e WHERE e.directs IS EMPTY GROUP BY d.name HAVING AVG(e.salary) > 50000
informacin confidencial Direccin de Tecnologa y Calidad

Dep TQ RH FIN AT

Pro 2000 9803 9999 1999


62

JPQL
Updates Queries. Sentencia equivalente al SQL update, pero con expresiones JPQL.
Actualizaciones masivas.
UPDATE Employee e SET e.salary = 60000 WHERE e.salary = 55000

Delete Queries. Sentencia equivalente al SQL delete, pero con expresiones JPQL.
Excelente para no cargar la Entidad ( EntityManager).

DELETE FROM Employee e WHERE e.department IS NULL

informacin confidencial Direccin de Tecnologa y Calidad

63

JPQL
Named Queries. Sentencias JPQL.
@NamedQuery Nombre lgico Query Mas eficientes que los queries dinmicos. JPA2 Tipeados.

informacin confidencial Direccin de Tecnologa y Calidad

64

JPQL
Resultados javax.persistence.TypedQuery
Escalar Colecciones

informacin confidencial Direccin de Tecnologa y Calidad

65

JPQL
BestPractices
No usar un ORM para generar Reportes. NamedQueries son una mejor opcin contra los querys dinmicos Cache Atributos Lazy No utilizar el mtodo clear()

informacin confidencial Direccin de Tecnologa y Calidad

66

Java Persistence API


Introduccin QuickStart Object-Relational Mapping Relationships Queries Concurrencia Integracin IDS Framework Cambry Lo que sigue

Agenda

informacin confidencial Direccin de Tecnologa y Calidad

67

Concurrencia
Bloqueo Optimista. Asume que mltiples transacciones pueden completarse sin afectar a otras
sd Concurrente interface javax.persistence.EntityManager Cliente01 Cliente02

find() :Entity

update(Entity)

find() :Entidy

update(Entity)

informacin confidencial Direccin de Tecnologa y Calidad

68

Concurrencia
Cmo puedo determinar si alguien afecto la entidad que tengo por actualizar?
sd Concurrente interface javax.persistence.EntityManager Cliente01 Cliente02

find() :Entity

find() :Entidy

update(Entity)

update(Entity)

informacin confidencial Direccin de Tecnologa y Calidad

69

Concurrencia
Versionando
@javax.persistence.Version long Columna requerida en EclipseLink.

informacin confidencial Direccin de Tecnologa y Calidad

70

Concurrencia
TransactionRepeatableRead TransactionSerializable

informacin confidencial Direccin de Tecnologa y Calidad

Concurrencia
TransactionReadUncommitted TransactionReadCommitted
default

informacin confidencial Direccin de Tecnologa y Calidad

Concurrencia
Modos de Bloqueo
EntityManager.lock() Mtodo explicito para bloquear entidades. EntityManager.refresh() Realiza un refresh de la entidad y a su vez la bloquea. EntityManager.find() Permite pasar un modo de bloqueo y aplicarlo a la entidad retornada. TypeQuery.setLockMode() Establece el modo de bloqueo que ser efectiva durante la ejecucin de la consulta.

informacin confidencial Direccin de Tecnologa y Calidad

73

Concurrencia
Tipos de bloqueo
OPTIMISTIC (READ) Versin de bloqueo optimista en el commit (@Version verificada), para asegurar que otra transaccin no modifico la entidad. OPTIMISTIC_FORCE_INCREMENT (WRITE) Versin de bloqueo optimista en el commit (@Version incremetada), para asegurar que otra transaccin no modifico la entidad. PESSIMISTIC_READ Entidad bloqueada en la base de datos, previene que cualquier otra transaccin adquiera la entidad para actualizar (WRITE) PESSIMISTIC_WRITE Entidad bloqueada en la base de datos, previene que cualquier otra transaccin adquiera la entidad para actualizar o leer (WRITE READ)

informacin confidencial Direccin de Tecnologa y Calidad

74

Concurrencia
Ejemplo Lectura Repetible

informacin confidencial Direccin de Tecnologa y Calidad

75

Java Persistence API


Introduccin QuickStart Object-Relational Mapping Relationships Queries Concurrencia Integracin IDS Framework Cambry Lo que sigue

Agenda

informacin confidencial Direccin de Tecnologa y Calidad

76

Integracin
Log4j
persistence.xml org.eclipse.persistence.logging CommonsLoggingSessionLog FastLogFormatter

Dependencias
commons-logging-1.1.1.jar log4j-1.2.16.jar

informacin confidencial Direccin de Tecnologa y Calidad

77

Integracin
EJB 3.1
Transaccin

informacin confidencial Direccin de Tecnologa y Calidad

78

Integracin
SpringFramework 3.x
Web Container AS

informacin confidencial Direccin de Tecnologa y Calidad

79

Integracin
Java SE

informacin confidencial Direccin de Tecnologa y Calidad

80

Java Persistence API


Introduccin QuickStart Object-Relational Mapping Relationships Queries Concurrencia Integracin IDS Framework Cambry Lo que sigue

Agenda

informacin confidencial Direccin de Tecnologa y Calidad

81

IDS Framework Cambry


Proyecto Java Standard
Entidades JPA Dominio Infraestructura

CambryEJB
META-INF/persistence.xml JTA Mapeo de entidades

informacin confidencial Direccin de Tecnologa y Calidad

82

IDS Framework Cambry


No utiliza el Patrn DAO/Repositorio No transforma las Entidades a DTO si no es necesario

informacin confidencial Direccin de Tecnologa y Calidad

83

Java Persistence API


Introduccin QuickStart Object-Relational Mapping Relationships Queries Concurrencia Integracin IDS Framework Cambry Lo que sigue

Agenda

informacin confidencial Direccin de Tecnologa y Calidad

84

Lo que sigue
Criteria API JPA con Hibernate JPA con OpenJPA Native Queries Bean Validator Lifecycle Event Profiler

informacin confidencial Direccin de Tecnologa y Calidad

85

Referencias
Apress - Pro JPA 2 Mastering the Java Persistence API Packt - EJB 3.1 Cookbook O'reilly - Enterprise JavaBeans 3.1 6th Edition http://wiki.eclipse.org/EclipseLink/UserGuide

informacin confidencial Direccin de Tecnologa y Calidad

86

PREGUNTAS

informacin confidencial Direccin de Tecnologa y Calidad

87

You might also like