Sunteți pe pagina 1din 74

API Java de persistencia

Aplicaciones web
y Bases de datos

Normalmente las aplicaciones web guardan datos


de distintos tipos, tanto datos producidos durante
la interaccin de los usuarios con la aplicacin
como datos que son mostrados a los usuarios.

Java incluye mecanismos para permitir que los


programas accedan a bases de datos.

Java tambi!n incluye mecanismos espec"#icos


para $acer m%s e#iciente el acceso a bases de
datos.
&ervidor de bases de datos

'y&() &erver *.*


+suario, root, -lave, mysql

Arranque, autom%tico .servicio 'y&()/

Parada,
-,0Arc$ivos de programa0'y&()0'y&() &erver *.*0bin0
mysqladmin 1uroot 1pmysql s$utdown

Administracin,
-,0Arc$ivos de programa0'y&()0'y&() &erver *.*0bin0
mysqladmin 1uroot 1pmysql
&ervidor de bases de datos, II

Acceso desde cliente,


-,0Arc$ivos de programa0'y&()0'y&() &erver *.*0bin0
mysql 1uroot 1pmysql
2
3inali4acin, quit5

Bases de datos,
2
-6A7 8A7ABA& CLS5
2
&9:; 8A7ABA&&5
2
+& CLS5

7ablas,
2
&9:; 7AB)&5
&ervidor de bases de datos, III

-at%logo,
in#ormation<sc$ema .base de datos/
2
7AB)&.7AB)<&-9'A, 7AB)<NA',
=/
2
-:)+'N&.7AB)<&-9'A,
7AB)<NA', -:)+'N<NA', =/
J8B-

J8B- es una biblioteca de Java que


permite la cone>in a bases de datos
relacionales.

J8B- se utili4a mediante un driver que al


cargarse permite que un programa Java
se conecte a un servidor de bases de
datos como un usuario determinado

J8B- proporciona clases para


representar las cone>iones, consultas
&() y resultados de las mismas.
J8B-, II

+n programa Java que utili4a J8B- $ace lo


siguiente,
2
-arga el driver J8B- .la clase que gestiona el
acceso a bases de datos/.
2
-rea una conexin a la base de datos.
2
-rea una consulta en base a cdigo &().
2
?ecuta la consulta, obteniendo un conjunto de
resultados .o void/.
2
Itera si es necesario sobre los resultados.
2
-ierra la cone>in.
+tili4acin de J8B- mediante la
API de persistencia

)a API de persistencia, que es parte de J pero


se puede utili4ar en otras aplicaciones Java, permite
la especi#icacin de manera sencilla de aplicaciones
con un n@mero elevado de usuarios simult%neos
que acceden de manera e#iciente a bases de datos.

-uando una aplicacin Java utili4a la API de


persistencia .JPA/, se crea un pool de conexiones
JDBC que se reutili4an por los distintos $ilos de la
aplicacin.
JPA, -onsultas

l )engua?e de -onsultas de Persistencia


de Java .JP()/ permite especi#icar
consultas a bases de datos relacionales
en #orma parecida a &() desde un
programa Java.
JPA, -onsultas, II

)os ob?etos que implementan la inter#a4


7yped(ueryABC de JPA representan
consultas del tipo anterior.

)os ob?etos de la clase anterior que


representan consultas que devuelven
valores .tipo &)-7/ al e?ecutar la
consultas devuelven listas de ob?etos.
6ecordatorio,
-onsultas en &()

IN&67 IN7: P6&:NA


DA)+& .EPepeF, EP!re4F, EinglesaF/

&)-7 G 36:' P6&:NA

+P8A7 P6&:NA
&7 NA-I:NA)I8A8HEespaIolaF

8)7 36:' P6&:NA


-onsultas en JP()

&)-7 p 36:' Persona p


2
Persona es una entidad .clase/
2
p representa una variable Java de la clase
2
l resultado de la e?ecucin de la consulta es
una lista de ob?etos de la clase

&e pueden aIadir otras cl%usulas,


2
&)-7 p 36:' Persona p
;96 p.nombre H EPepeF
-onsultas en JP(), II

-uestiones pendientes de estudiar,


2
Programacin de consultas
2
Acceso a resultados devueltos por las
consultas
2
8e#inicin de entidades
2
&incroni4acin
JPA, ntity'anager

Para crear y e?ecutar consultas mediante JPA es


necesario crear antes un ob?eto que implementa
la inter#a4 ntity'anager, que se ocupa de la
gestin de los datos y de ob?etos que los
representan.

A continuacin veremos cmo se utili4an y cmo


se crean los ntity'anagers.

7ras esto veremos cmo se de#inen las clases de


ob?etos que representan registros de una base de
datos.
JPA, Programacin de
consultas

Para crear una consulta se utili4a el m!todo


create(uery de la clase ntity'anager, cuyo
argumento es la cadena de caracteres que
de#ine la consulta JP(),
7yped(ueryAPersonaC query H
em.create(uery.
J&)-7 p 36:' Persona pK,
Persona.class/5
JPA, Acceso a resultados

Para e?ecutar una consulta de tipo &)-7


se utili4a el m!todo get6esult)ist, que
devuelve una lista de ob?etos,
?ava.util.)istAPersonaC pers H
query.get6esult)ist./5
Lestin de persistencia
en Java

n Java , cuando un contenedor activa un ob?eto,


puede inyectar una ntity'anager3actory que sea
un atributo suyo o directamente un ntity'anager.

)a inyeccin directa de ntity'anager solamente se


puede $acer en un conte>to mono$ilo .JB sin
estado, beans gestionados de J&3, =/.

)a inyeccin de ntity'anager3actory se puede


$acer en cualquier conte>to .servlet,
&ervlet-onte>t)istener, p%gina J&P, bean gestionado
de J&3 o JB/.
Lestin de persistencia
en Java , ?emplos

?emplo de inyeccin de .'.3actory,


@PersistenceUnit
private EntityManagerFactory em#5
EntityManager em H
em#.createntity'anager./5

?emplo de inyeccin de ntity'anager,


@PersistenceContext
EntityManager em5
6ecursos en Java

)os servidores de aplicaciones web permiten el


acceso a recursos externos como sistemas de
gestin de bases de datos o de colas de
mensa?es.

l servidor registra los recursos, asocindoles


un nombre accesible a trav!s del protocolo
Java JN8I. l uso de JN8I es transparente.

)a gestin de recursos se puede $acer desde


NetBeans o desde la aplicacin de
administracin del servidor de aplicaciones.
-onsideraciones para la utili4acin
de la API de persistencia en el lab

Para acceder a una base de datos


mediante JPA $ay que utili4ar dos
recursos, un recurso J8B- y un pool de
cone>iones J8B-.
-onsideraciones para la utili4acin
de la API de persistencia en el lab, II

+n pool de cone>iones J8B- es un


con?unto de cone>iones J8B- a una base
de datos disponibles para ser reutili4adas
concurrentemente por distintos $ilos de la
aplicacin.

Para especi#icar un pool de cone>iones se


indica la base de datos, usuario,
contraseIa, propiedades, etc.
-onsideraciones para la utili4acin
de la API de persistencia en el lab, III

+n recurso J8B- es un proxy a un pool


de cone>iones.

Para especi#icar un recurso J8B- $ay que


indicar el nombre con que est% registrado
el pool correspondientes y las
propiedades.
-onsideraciones para la utili4acin
de la API de persistencia en el lab, III

Para crear un recurso J8B- y un


connection pool en el servidor de
aplicaciones $ay dos posibilidades,
2
)ocal$ost,MNMN 1C 6esources 1C J8B-
2
NetBeans 1C Proyecto 1C New persistence unit
1C new 8ata &ource 1C new 8ata Base
connection
Acceso a recursos J8B- desde
aplicaciones web

l #ic$ero de con#iguracin persistence.>ml


permite especi#icar las bases de datos
accesibles a una aplicacin y las entidades
que utili4a.

l #ic$ero de con#iguracin debe incluirse en


el directorio O'7A1IN3 del mdulo
correspondiente.

)a cl%usula persistence1unit permite


especi#icar un data1source.
?emplo de #ic$ero persistence.>ml
AB>ml versionHPQ.RP encodingHP+731NP BC
Apersistence versionHPQ.RP
>mlnsHP$ttp,OO?ava.sun.comO>mlOnsOpersistenceP
>mlns,>siHP$ttp,OOwww.wS.orgO...J
>si,sc$ema)ocationHP$ttp,OO...PC
Apersistence1unit nameHPbooTP transaction1typeHPJ7APC
<jta-data-sourcejdbc!""de#ault<!jta-data-source
<classcom$%idgets$&rder<!class
<classcom$%idgets$Cust<!class
AOpersistence1unitC
AOpersistenceC
-lases entidad

&on clases asociadas a tablas .una o varias/


en una base de datos.

&us ob?etos se asocian a registros.

&e declaran mediante la anotacin Untity.

)a clave primaria se indica mediante la


anotacin UId .obligatorio/.

@Entity
public class Person ' @(d int id) * +
-lases entidad, II

&i la tabla primaria tiene un nombre


di#erente de la clase, !ste se especi#ica
mediante la anotacin U7able.name/.

NetBeans permite la opcin de crear la


tabla .si no e>iste/ al compilar el cdigo de
la clase
-lases entidad, III

7ipos de atributos,
2
Persistentes .ver pr>ima transparencia/
2
No persistentes .U7ransient/
2
mbebidos .Umbedded/, de otra entidad,
incluidos en la tabla de la primera
2
Lenerados autom%ticamente
.ULeneratedDalue/
2
6elaciones .pr>ima transparencia/
-lases entidad,
Atributos persistentes

&on todos salvo los no persistentes

7ienen que ser protegidos o privados

7ipos, Primitivos, wrappers, &tring,


temporales .8ate, =/, arrays de bytes y
c$ars, enumeraciones, clases embedibles

-olecciones, -ollection, &et, )ist, 'ap


8e#inicin de entidades en
persistence.>ml .alternativa/
ApersistenceC
Apersistence1unit nameHJ=JC
A?ta1data1sourceC=AO?ta1data1sourceC
=
<classcom$%idgets$&rder<!class
<classcom$%idgets$Cust<!class
AOpersistence1unitC
AOpersistenceC
JPA b%sico, 6esumen

)as clases de entidades representan


registros de tablas. &e de#inen mediante la
anotacin Untity.

)os recursos J8B- y los pools de


cone>iones se utili4an por el servidor web
para implementar la cone>in a la base de
datos. &e de#inen en el servidor.
JPA b%sico, 6esumen, II

)os recursos utili4ados por una aplicacin


se especi#ican en el #ic$ero
persistence.>ml.

)os ntity'anagers gestionan el acceso a


las bases de datos. &e inyectan en un
ob?eto gestionado por un contenedor o se
crean a partir de una #%brica inyectada.
st%n asociados a un recurso J8B-.
JPA b%sico, 6esumen, III

)os 7yped(uerys pueden e?ecutar


consultas JPA. &e crean a partir de ellas y
en su caso devuelven listas de entidades.
?ercicio

V8BP6&RW 8esarrollar una aplicacin


web que permita ver la lista de personas
incluidas en una base de datos de
personas sencilla, como la mencionada
en los e?emplos anteriores.
JPA, Programacin de
consultas, II

&e pueden de#inir 7yped(uerys con tipo


atmico .Integer, &tring, etc./ para consultas
que seleccionan una sola columna,
7yped(ueryA&tringC query H
em.create(uery.
J&)-7 p.nombre
36:' Persona pK, &tring.class/5
JPA, Programacin de
consultas, III

)as consultas de actuali4acin o borrado


se de#inen de #orma similar,
+P8A7 Persona p
&7 p.nacionalidadHEespaIolaF
8)7 36:' Persona p
;96 p.estadoHE#allecidoF
JPA, Programacin de
consultas, ID

Para e?ecutar una consulta de tipo


+P8A7 o 8)7 se utili4a el m!todo
e>ecute+pdate./,
query.e>ecute+pdate./5
JPA, Programacin de
consultas, D

&e pueden de#inir consultas parametri4adas


utili4ando patrones de par%metros,
7yped(ueryAPersonaC queryH
em.create(uery.
J&)-7 p 36:' Persona p
;96 p.edadHBQ/5
pers H query.setParameter.Q, S/.get6esult)ist./5
?ercicio

V8BP6&QW 8esarrollar una aplicacin


web que permita gestionar a trav!s de
Internet una base de datos de personas
sencilla, como la mencionada en los
e?emplos anteriores, permitiendo dar de
alta y de ba?a a personas y modi#icar sus
datos.
?ercicios voluntarios

V8B3I)=W -ompletar los e?ercicios de los


temas anteriores que utili4an #ic$eros
.Py-Q, 3AD, Py-X, &;J&3, &;--,
AJAYP6&/ para guardar sus datos
sustituyendo los #ic$eros por una base de
datos.
JPA, Programacin de
consultas, DI

&e pueden utili4ar consultas &()


.consultas nativas/ mediante el m!todo
createNative(uery de la clase
ntity'anager.

l ob?eto creado por


ntity'anager.createNative(uery
implementa la inter#a4 (uery,
superinter#a4 de 7yped(ueryABC.
JPA, Programacin de
consultas, DII

)os registros obtenidos mediante el m!todo


(uery.get6esult)ist a partir de una consulta
&() son arrays de ob?etos.

?emplo,
:b?ectVW persona H
.:b?ectVW/ em.createNative(uery.
P&)-7 G 36:' P6&:NAK/
.get6esult)ist./.get.R/5
out.println.personaVRW Z P P Z personaVQW/5
JPA, Programacin de
consultas, DIII

&e puede determinar el n@mero del registro


a partir del cual se e>traen los resultados y
el n@mero m%>imo de resultados a e>traer
en una consulta,
em.create(uery.
J&)-7 p 36:' Persona pK/
.set3irst6esult.*/.set'a>6esults.[/5
B@squeda de ob?etos
individuales

&e $ace mediante el m!todo #ind.-lassAB


C, :b?ect/ de la clase ntity'anager.

+tili4a su segundo argumento como clave


primaria.

?emplo,
Person p H e.#ind.Person.class, XQSR/5
ntidades persistentes,
-iclo de vida

)as entidades persistentes pueden estar


desacopladas de la base de datos o
acopladas a ella a trav!s de un
ntity'anager. n este caso est%n en el
estado 'anaged .gestionadas/.

Por e?emplo, una entidad persistente


creada a trav!s de una consulta a la base
de datos normalmente est% gestionada por
el ntity'anager que $ace la consulta.
ntidades persistentes,
-iclo de vida, II
Managed
.em/
,etac-ed
.E/EC0
ntidades persistentes,
-iclo de vida, III

+na entidad persistente creada mediante


new est% desacoplada de la base de
datos y se encuentra inicialmente en el
estado New.

&i una entidad est% en el estado New, en


la base de datos puede $aber un registro
cuya clave primaria sea la misma de la
entidad.
ntidades persistentes,
-iclo de vida, ID
Managed
.em/
1e%
,etac-ed
.E/EC0 ne%
ntidades persistentes,
-iclo de vida, D

)as entidades persistentes que est%n en el


estado New pueden acoplarse a la base de
datos mediante el m!todo persist.:b?ect/
de la clase ntity'anager, que las gestiona
a partir de ese momento tras insertar los
registros necesarios en la base de datos.

&i en la base de datos ya $ay un registro


con la misma clave primaria, se lan4a una
e>cepcin.
ntidades persistentes,
-iclo de vida, DI
Managed
.em/
1e%
,etac-ed
.E/EC0 ne%
VAIade registroW
em.persist.o/
ntidades persistentes,
-iclo de vida, DII

)as entidades persistentes gestionadas se


pueden desacoplar de la base de datos
mediante el m!todo close.:b?ect/ del
ntity'anager que las gestiona, pasando a
estar en el estado 8etac$ed.

l m!todo merge.:b?ect/ de la clase


ntity'anager permite volver a gestionar una
entidad persistente que est% en el estado
8etac$ed. 7ras su e?ecucin se actuali4ar% la
base de datos con su contenido.
ntidades persistentes,
-iclo de vida, DIII
Managed
.em/
1e%
,etac-ed
.E/EC0 ne%
VAIade registroW
em.persist.o/
em.close.o/
em.merge.o/
Vob?B8W
ntidades persistentes,
-iclo de vida, IY

7anto en el estado New como en 8etac$ed


los cambios que origina el cambio de estado
de una entidad persistente no se trasladan
necesariamente a la base de datos de
inmediato .se $ace cuando termina la
transaccin que se est% e?ecutando/.

)o mismo ocurre con los cambios en los


valores de los atributos persistentes de las
entidades gestionadas.
ntidades persistentes,
-iclo de vida, Y

&e puede #or4ar la reali4acin inmediata en


la base de datos de los cambios pendientes
de reali4ar correspondientes a todas las
entidades gestionadas por un ntity'anager
mediante el m!todo #lus$./ del mismo.

sto permite que cualquier otra consulta que


se $aga re#le?e los cambios reali4ados en las
entidades gestionadas por el '.
ntidades persistentes,
-iclo de vida, YI
Managed
.em/
1e%
,etac-ed
.E/EC0 ne%
VAIade registroW
em.persist.o/
em.close.o/
em.merge.o/
Vob?B8W
Vob?sB8W
em.#lus$./
ntidades persistentes,
-iclo de vida, YII

)as consultas tienen asociado un modo de


flush, que permite $acer que siempre que se
e?ecuten $aya garant"as de que la base de
datos est% actuali4ada con respecto a
cambios en las entidades gestionadas.

l modo de flush puede ser A+7: o


-:''I7.

)os ntity'anagers tambi!n tienen un


modo de flush.
ntidades persistentes,
-iclo de vida, YIII

)a actuali4acin de los registros


correspondientes a las entidades
gestionadas por un ntity'anager se
puede $acer mediante una llamada
e>pl"cita al m!todo #lus$./ en el programa
o lo puede $acer el ntity'anager al
e?ecutar acciones previstas en su
#uncionamiento .por e?emplo, cuando se
termina una transaccin/.
ntidades persistentes,
-iclo de vida, YID

7ambi!n se puede actuali4ar una entidad


acoplada a una base de datos con los
valores que !sta contiene. sto se $ace
mediante el m!todo
ntity'anager.re#res$.:b?ect/.

&e puede borrar de una base de datos la


in#ormacin correspondiente a una entidad
acoplada a ella, mediante el m!todo remove
de la clase ntity'anager. )a entidad pasa
entonces al estado 6emoved.
ntidades persistentes,
-iclo de vida, YD
Managed
.em/
1e%
,etac-ed
.E/EC0 ne%
VAIade registroW
em.persist.o/
em.close.o/
em.merge.o/
Vob?B8W
Vob?sB8W
em.#lus$./
VB8 ob?W
em.re#res$.o/
2emo3ed
em.remove.o/
Vlimina registroW
Lestin de entidades,
:tros aspectos

em.setFlus-Mode.3lus$'ode7ype/
OO A+7: .tras e?ecucin de update/
OO -:''I7 .tras #inali4ar transaccin/

em.loc4.:b?ect, )ocT'ode7ype/
OO 6A8, ;6I7

em.clear./5
OO 8esconecta entidades, sin sincroni4arlas

em.close./5 OO -ierra cone>iones


6elaciones muc$os a uno
?emplo

7ablas,
2
Persona.id int primary Tey, nombre varc$ar,
trabajo int re# Empresa$id/
2
mpresa.id int primary Tey, nombre varc$ar/

ntidades,
2
Persona.UId int id5 &tring nombre5
@Many0o&ne Empresa trabajo/ !! Propietario
2
mpresa.UId int id5 &tring nombre/
6elaciones muc$os a muc$os
?emplo

7ablas,
2
Persona.id int primary Tey, nombre varc$ar,
traba?o int re# mpresa.id/
2
mpresa.id int primary Tey, nombre varc$ar/
2
Clientes5idE int re# Empresa$id6
idP int re# Persona$id
primary 4ey 5idE6 idP77
6elaciones muc$os a muc$os
?emplo, II

ntidades,
2
Persona.UId int id5 &tring nombre5
U'any7o:ne mpresa traba?o/
2
mpresa.UId int id5 &tring nombre5
@Many0oMany .et<Persona clientes/ !! Prop

&e podr"a $aber $ec$o propietaria a la


entidad Persona. )a eleccin se debe basar
en criterios de e#iciencia.
6elacin uno a muc$os

6elacin inversa de otra muc$os a uno

&e implementa por motivos de e#iciencia .si


se va a utili4ar con #recuencia/

?emplo,
mpresa.UId int id5 &tring nombre5
U'any7o'any &etAPersonaC clientes5
@&ne0oMany5mapped8y9:trabajo;7
.et<Persona trabajadores7
6elaciones muc$os a muc$os,
6elacin inversa

&e implementa por motivos de e#iciencia .si


se va a utili4ar con #recuencia/

?emplo,
Persona.UId int id, &tring nombre5
U'any7o:ne mpresa traba?o5
@Many0oMany5mapped8y9:clientes;7
.et<Empresa contratistas/
6elaciones uno a uno

?emplo,
mpresa.=5 @&ne0o&ne Persona director/

n la base de datos una relacin uno a uno no


se distingue de una muc$os a uno, salvo qui4%s
por una restriccin de integridad

)as relaciones uno a uno se especi#ican


mediante la anotacin U:ne7o:ne

)a relacin inversa de una relacin uno a uno es


tambi!n una relacin uno a uno
-onsultas y relaciones

?emplos, mpleados de 6en#e


select p #rom mpresa e J:IN e.clientes p
w$ere e.nameHE6en#eF
.lista de Person/

Para poder $acer una consulta que atraviesa


una relacin, la relacin tiene que estar de#i1
nida .en la clase de entidades persistentes/
en la direccin en la que es atravesada.
ntidades,
Jerarqu"a de $erencia

)a API de persistencia incluye varios


mecanismos para aprovec$ar la $erencia
que proporciona Java
6elaciones y gestin de
entidades

)a API de persistencia permite especi#icar que las


acciones de insercin yOo borrado de ob?etos
deben propagarse a trav!s de determinadas
relaciones.

Para ello se utili4a el atributo cascade de la


anotacin de la relacin, cuyos valores pueden
ser P6&I&7, 6':D o A)).

Por e?emplo, si se quieren eliminar los ob?etos


relacionados con uno cuando se elimine, se utili4a
el atributo cascadeH6':D de la relacin
6elaciones y gestin de
entidades, II

?emplo, continuacin,
mpresa.UId int id, &tring nombre,
U'any7o'any &etAPersonaC clientes,
U:ne7o'any.mappedByHJtraba?oK
cascadeH6':D/
&etAPersonaC traba?adores/
7ransacciones en &()

+na transaccin es una secuencia de


instrucciones &() que se e?ecutan
provisionalmente, pudiendo anularse en
cualquier momento o consolidarse al #inal.

Por e?emplo, un movimiento en una


cuenta corriente puede reali4arse
mediante una transaccin que comprueba
que el usuario $a actuado correctamente
en el ca?ero autom%tico.
7ransacciones en &(), II

n una sesin de e?ecucin de instrucciones


en un &istema de Lestin de Bases de
8atos cualquier instruccin normal comien4a
una transaccin si no $ay una comen4ada.

)a instruccin -:''I7 termina una


transaccin dando por buenos los cambios.

)a instruccin 6:))BA-\ termina una


transaccin des$aciendo los cambios.
7ransacciones en Java

Java permite de#inir transacciones que


abarcan la e?ecucin de m!todos, de
manera que si se produce un error tanto en
el servidor de bases de datos como en la
m%quina virtual se reali4an acciones de
recuperacin a un estado seguro.

)as transacciones son un tema optativo en


-)& y se estudiar%n ?unto con las
nterprise Java Beans .JB/.
-iclo de vida completo
de entidades

S-ar putea să vă placă și