Professional Documents
Culture Documents
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
Agenda
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
JPA
informacin confidencial Direccin de Tecnologa y Calidad
Conocimientos Necesarios
SQL
DDL DML
Agenda
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
JPA Intro
Soluciones
Sistema de Archivos Base de Datos Relacionales ACID
JPA Intro
Modelo de Dominio
Clases Atributos Relaciones
Modelo E-R
Tablas Columnas Relaciones
DAO
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
10
JPA Intro
Solucin DAO
11
JPA Intro
ORM (Object-Relational Mapping)
Tcnica de Programacin para convertir datos relacionales en objetos.
12
JPA Intro
Java Persistence API
Estndar de persistencia para aplicaciones JavaEE5+ Framework Persistencia basado en POJOs Componente de Persistencia de EJB
JPA Intro
Java Persistence API
Clases de Dominio
Administrador De Entidades
Base de Datos
JPA Intro
Componentes Java Persistence API
cmp EntityManager
DAO Repository
EntityManager
DataSource
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
17
Agenda
18
QuickStart
Requerimientos
JDK6 IDE Eclipse Indigo Base de Datos MySQL SQL Cliente MYSQL WorkBeach JPA EclipseLink JDBC - mysql Material Curso \\smprodtq2\software\JPA
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
20
QuickStart
JavaProject
Java 6
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
23
QuickStart
Configuracin JPA AS
Transaccin JTA DataSource AS Entidades (opcional)
24
QuickStart
Entity JPA
Java Class javax.persitence
25
QuickStart
JPA Entity Manager javax.persistence.EntityManager
cmp EntityManager
DAO Repository
EntityManager
DataSource
26
QuickStart
Salvar
em.persist(pojo); SQL Insert
Buscar por ID
Pojo pojo = em.find(Pojo.class,999); SQL Select
27
QuickStart
Eliminar
entityManager.remove(pojo); SQL delete
Actualizar
entityManager.merge(pojo); SQL Update
28
QuickStart
Ejercicios
1. Revisar la case: mx.ids.training.EntityManagerHelper 2. Ejecutar la prueba unitaria de: mx.ids.training.TestEntityManager
29
Agenda
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.
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.
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
33
Object-Relational Mapping
Mapear una Entidad
Field Access Getter & Setter no requeridos Property Access JavaBean Mezclado (2.0)
34
Object-Relational Mapping
Mapear una Entidad
Requerido @Entity @Id (PK) Opcional @Table @Column
35
Object-Relational Mapping
ID
Por cada entidad, debes utilizar uno de los siguientes: @Id @EmbeddedId Multipes @Id y un @IdClass
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
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
38
Object-Relational Mapping
Generacin del ID de la Entidad @GeneratedValue
IDENTITY
SEQUENCE
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
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
41
Object-Relational Mapping
FetchType. Define estrategias para traer datos de la base de datos.
LAZY EAGER
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
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
44
Object-Relational Mapping
Ejercicio
Realizar el Mapeo va @anotaciones JOBS REGIONS COUNTRIES LOCATIONS Crear una prueba unitaria
45
Agenda
46
Relationships
Relacin Many-to-one
@ManyToOne FetchType Lazy @JoinColumn. FK Atributo tipo Entidad (Deparment)
47
Relationships
Relacin One-to-one
@OneToOne FetchType Lazy @JoinColumn. FK Atributo tipo Entidad (Deparment)
48
Relationships
Relacin bidireccional One-to-One
@OnetoOne FetchType Lazy Parametro mappedBy debe ser el nombre del atributo con el que fue mapeado.
49
Relationships
Relacin (bidireccional) One-to-Many
@OnetoMany FetchType Lazy Parametro mappedBy debe ser el nombre del atributo con el que fue mapeado.
50
Relationships
Ejercicio
Realizar los mapeos @ManytoOne, @OneToOne, y bidireccionales. COUNTRIES DEPARTMENTS JOBS LOCATIONS REGIONS
51
Agenda
52
Querys
SQL Nativo Criteria Java Persistence Query Language
entityManager.createQuery(jpql); entityManager.createNamedQuery(nombre.logico);
53
JPQL
Sentencia select
entidades atributos Instancias de clases no mapeadas
Propiedad de Entidad
Alias
Entidad
54
JPQL
JOINS
Un join es una consulta que combina el resultado de mltiples entidades.
Entidad A
Entidad B
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
a2
a2
b8 b9 b10 a1
a2
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
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
58
JPQL
WHERE. Utilizada para especificar condiciones de filtrado.
SELECT a FROM EntidadA a WHERE a.name = Transcend
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)
Aggretate Query
Subquery Correlacionado
N ejecuciones
60
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)
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
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).
63
JPQL
Named Queries. Sentencias JPQL.
@NamedQuery Nombre lgico Query Mas eficientes que los queries dinmicos. JPA2 Tipeados.
64
JPQL
Resultados javax.persistence.TypedQuery
Escalar Colecciones
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()
66
Agenda
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)
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)
69
Concurrencia
Versionando
@javax.persistence.Version long Columna requerida en EclipseLink.
70
Concurrencia
TransactionRepeatableRead TransactionSerializable
Concurrencia
TransactionReadUncommitted TransactionReadCommitted
default
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.
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)
74
Concurrencia
Ejemplo Lectura Repetible
75
Agenda
76
Integracin
Log4j
persistence.xml org.eclipse.persistence.logging CommonsLoggingSessionLog FastLogFormatter
Dependencias
commons-logging-1.1.1.jar log4j-1.2.16.jar
77
Integracin
EJB 3.1
Transaccin
78
Integracin
SpringFramework 3.x
Web Container AS
79
Integracin
Java SE
80
Agenda
81
CambryEJB
META-INF/persistence.xml JTA Mapeo de entidades
82
83
Agenda
84
Lo que sigue
Criteria API JPA con Hibernate JPA con OpenJPA Native Queries Bean Validator Lifecycle Event Profiler
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
86
PREGUNTAS
87