P2C5 Introducción a JEE5 - II
-
Upload
aurelio-martin-obando-tavara -
Category
Education
-
view
1.503 -
download
9
description
Transcript of P2C5 Introducción a JEE5 - II
![Page 2: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/2.jpg)
Enalteciendo Los Temas
2Beans de Sesión
3Converter y
Validator
1 1Entidades
![Page 3: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/3.jpg)
AGENDA EntidadesBeans de SesiónConverter y ValidatorResumen
Clase 05
1
![Page 4: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/4.jpg)
2 CONTENIDO
![Page 5: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/5.jpg)
Una entidad es un objeto del dominio de persistencia, pero mucho mas ligero. Típicamente una entidad representa una tabla de un modelo de datos relacional, en donde cada instancia de la entidad es una fila en dicha tabla.
JPA brinda soporte para facilitar la construcción y mantenimiento de las relaciones entre clases, su cardinalidad: @OneToOne, @OneToMany, @ManyToOne, @ManyToMany y la navegabilidad: Bidireccional y Unidireccional.
Y finalmente, brinda gran facilidad al momento de mapear herencias o especializaciones entre objetos.
ENTIDADES
![Page 6: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/6.jpg)
Toda entidad debe tener una llave primaria
Puede mapearse a una (llave primaria simple) o más (llave primaria compuesta) propiedades
Consiste de múltiples llaves primarias simples
LAVES PRIMARIAS COMPUESTAS
![Page 7: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/7.jpg)
Llav
es P
rimar
ias
Com
pues
tas Consiste de múltiples llaves primarias
Puede ser representada por un clase “Primary Key” que…
debe ser Serializablepublic class MowerPK implements java.io.Serializable {
debe tener un constructor público sin paso de parámetros
public MowerPK() { … }debe implementar los métodos equals() y hashCode() public int hashCode() { ... }
public boolean equals(Object obj) { ... }
![Page 8: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/8.jpg)
Usa
ndo
una
Clas
e Pr
imar
y Ke
y co
mo
un Id
Clas
sNo es usada internamente por clases persistentes
Usado por el Entity Manager
Ejemplo de esquema de base de datos
create table MOWER (make varchar(255) not null, model varchar(255) not null, size integer not null, primary key (make, model)
)
![Page 9: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/9.jpg)
Ejem
plo
de C
lase
Com
pues
ta
PKpackage ejava.examples.orm.core;
import java.io.Serializable;public class MowerPK implements Serializable { private static final long serialVersionUID = 1L; private String make; private String model; public MowerPK() { … } public MowerPK(String make, String model) { this.make = make; this.model = model; } public static long getSerialVersionUID() { return serialVersionUID; } public String getMake() { return make; } private void setMake(String make) { this.make = make; }…
![Page 10: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/10.jpg)
Ejem
plo
de C
lase
Com
pues
ta
PK (C
ont.)
… public String getModel() { return model; } private void setModel(String model) { this.model = model; } public int hashCode() { return make.hashCode() + model.hashCode(); } public boolean equals(Object obj) { try { if (this == obj) return true; return make.equals(((MowerPK)obj).getMake()) && model.equals(((MowerPK)obj).getModel()); } catch (Throwable ignored) { return false; } } public String toString() { return super.toString() + ", make=" + make + ", model=" + model; }}
![Page 11: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/11.jpg)
Ejem
plo
de u
so d
e un
IdCl
ass package ejava.examples.orm.core.annotated;
import java.io.Serializable;import javax.persistence.*;import ejava.examples.orm.core.MowerPK;
@Entity@Table(name="MOWER")@IdClass(MowerPK.class)public class Mower implements Serializable { private static final long serialVersionUID = 1L; private String make; private String model; private int size; public Mower() { … } public Mower(String make, String model) { this.make = make; this.model = model; }
…
![Page 12: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/12.jpg)
Ejem
plo
de u
so d
e un
IdCl
ass
(Con
t.)
… @Id @Column(nullable=false, updatable=false) public String getMake() { return make; } private void setMake(String make) { this.make = make; } @Id @Column(nullable=false, updatable=false) public String getModel() { return model; } private void setModel(String model) { this.model = model; } public int getSize() { return size; } public void setSize(int size) { this.size = size; }}
![Page 13: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/13.jpg)
Usa
ndo
un c
lase
Prim
ary
Key
com
o un
Em
bedd
edId
Esquema de base de datos
create table NAPSACK (NAPSACK_MAKE varchar(255) not null, NAPSACK_MODEL varchar(255) not null, size integer not null, primary key (NAPSACK_MAKE, NAPSACK_MODEL)
)
![Page 14: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/14.jpg)
Ejem
plo
de E
mbe
dded
Idpackage ejava.examples.orm.core.annotated;
import java.io.Serializable;import javax.persistence.*;
@Embeddablepublic class NapsackPK implements Serializable { private static final long serialVersionUID = 1L; private String make; private String model; public NapsackPK() { … } public NapsackPK(String make, String model) { this.make = make; this.model = model; }
@Column(name="NAPSACK_MAKE") public String getMake() { return make; } public void setMake(String make) { this.make = make; }
…
![Page 15: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/15.jpg)
Ejem
plo
de E
mbe
dded
Id
(Con
t.)
@Column(name="NAPSACK_MODEL") public String getModel() { return model; } public void setModel(String model) { this.model = model; }
public int hashCode() { return make.hashCode() + model.hashCode(); }
public boolean equals(Object obj) { try { if (this == obj) return true; return make.equals(((NapsackPK)obj).getMake()) && model.equals(((NapsackPK)obj).getModel()); } catch (Throwable ignored) { //catch NP & Cast Exceptions return false; } } public String toString() { return super.toString() + ", make=" + make + ", model=" + model; }}
![Page 16: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/16.jpg)
Ejem
plo
de u
so d
e Em
bedd
edId
usan
do A
nota
cion
espackage ejava.examples.orm.core.annotated;
import java.io.Serializable;import javax.persistence.*;
@Entity@Table(name="NAPSACK")public class Napsack implements Serializable { private static final long serialVersionUID = 1L; private NapsackPK pk; private int size; public Napsack() {} public Napsack(String make, String model) { this.pk = new NapsackPK(make, model); } @EmbeddedId public NapsackPK getPk() { return pk; } public void setPk(NapsackPK pk) { this.pk = pk; } …}
![Page 17: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/17.jpg)
JPA reconoce y mapea las relaciones en el modelo de datos relacional y lo translada a las clases en el modelo de dominio
De este modo, las cardinalidades como Uno-a-Uno, Muchos-a-Uno, Uno-a-Muchos y Muchos-a-Muchos existen como anotaciones en el marco de trabajo JPA
Estas anotaciones también son susceptible a cierta optimización de acuerdo a ciertas características que veremos a continuación
MAPEO DE OBJETOS Y RELACIONES
![Page 18: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/18.jpg)
One-To-One (Uno-a-Uno)
![Page 19: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/19.jpg)
One
ToO
neUni-direccional
Bi-direccional
![Page 20: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/20.jpg)
One
ToO
ne
Uni-Direcciona
l
•solo una clase (“owner”) conoce la relación•usa
@OneToOne•esta clase
define el mapeo a la base de datos•podría usar
@JoinColumn o @JoinTable
Bi-Direcciona
l
•ambas clases conocen la relación•usan @OneToOne
•una clase (“owner”) define el mapeo a la base de datos•podría usar
@JoinColumn o @JoinTable
•la otra clase (“inverse side”) señala la propiedad de la clase dueño que define la relación•usa
@OneToOne(mappedBy=”remote property”)
![Page 21: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/21.jpg)
Anot
ació
n @
One
ToO
nepublic interface OneToOne extends ... {
Class targetEntity() default void.classclase entidad a la que está relacionadausualmente se determina por el tipo de la propiedad
CascadeType[] cascade() default {}define que operaciones de persistencia se realizan en modo cascada sobre el objeto relacionado
FetchType fetch() default EAGERdefine el modo de carga del objeto relacionado
boolean optional() default truedefine si wl valor de la relación puede ser nula o no
String mappedBy() default “”usado solo en relaciones bidireccionales en el lado inverso de la relaciónseñala la propiedad remota en la clase dueña de la relación que define el mapeo a la base de datos
![Page 22: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/22.jpg)
Anot
ació
n @
Join
Colu
mns
public interface JoinColumns extends ... {
public abstract JoinColumn[] value();define un arreglo de claves foráneas que son parte de una llave primaria compuesta
Example Usage
@OneToOne@JoinColumns({
@JoinColumn(...),@JoinColumn(...)
})
![Page 23: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/23.jpg)
Many-To-One (Muchos-a-Uno)
![Page 24: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/24.jpg)
Man
yToO
neUni-direccional
Bi-direccional
![Page 25: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/25.jpg)
Man
yToO
ne
Uni-Direcciona
l
•El lado “many “ es la unica clase (“owner”) que conoce la relación•usa
@ManyToOne•Esta clase
define el mapeo a la base de datos•Podría usar
@JoinColumn o @JoinTable
Bi-Direcciona
l
•Se requiere que el lado “many” sea el dueño de la relación
•El lado “one” (“inverse side”) señala la propiedad de la clase dueña que define la relación•Podría usar
@OneToMany(mappedBy=”remote property”)
![Page 26: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/26.jpg)
Anot
ació
n @
Man
yToO
nepublic interface ManyToOne extends ... {
Class targetEntity() default void.classclase entidad a la que está relacionadausualmente se determina por el tipo de la propiedad
CascadeType[] cascade() default {}define que operaciones de persistencia se realizan en modo cascada sobre el objeto relacionado
FetchType fetch() default EAGERdefine el modo de carga del objeto relacionado
boolean optional() default truedefine si wl valor de la relación puede ser nula o no
![Page 27: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/27.jpg)
Anot
ació
n @
One
ToM
any
public interface OneToMany extends ... {
Class targetEntity() default void.classclase entidad a la que está relacionadausualmente se determina por el tipo de la propiedad
CascadeType[] cascade() default {}define que operaciones de persistencia se realizan en modo cascada sobre el objeto relacionado
FetchType fetch() default EAGERdefine el modo de carga del objeto relacionado
String mappedBy() default “”usado solo en relaciones bidireccionales en el lado inverso de la relaciónseñala la propiedad remota en la clase dueña de la relación que define el mapeo a la base de datos
![Page 28: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/28.jpg)
Mod
ifica
ndo
una
lista
de
obje
tos
Incorrecto
•No reemplazar la colección de un objeto administrado con otra de un objeto no administrado
•Collection<Checkout> newCheckouts = ...
•borrower.setCheckouts(newCheckouts); //ERROR!
Correcto
•Actualizar la colección existente dentro del objeto administrado
•Collection<Checkout> newCheckouts = ...
•borrower.getCheckouts().add(newCheckouts);
![Page 29: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/29.jpg)
One-To-Many (Uno-a-Muchos)
![Page 30: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/30.jpg)
One
ToM
any
Uni-direccional
![Page 31: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/31.jpg)
One
ToM
any
Uni-Direccional
• El lado “one“ es la unica clase (“owner”) que conoce la relación• usa @OneToMany
• Esta clase define el mapeo a la base de datos usando un Join (o “link”) table• Debe usar @JoinTable
Bi-Direccional
• Lo mismo que el caso bidireccional de ManyToOne
![Page 32: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/32.jpg)
Link
/Joi
n Ta
ble
![Page 33: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/33.jpg)
Anot
ació
n @
Join
Tabl
epublic interface JoinTable extends ... {
muy similar a la anotación @Table
String name() default “”nombre de la tabla para la tabla “join”
String catalog() default “”nombre de la base de datos
String schema() default “”nombre del esquema
JoinColumn[] joinColumns() default {}arreglo de columnas que definen la clave foranea a este
objetoJoinColumn[] inverseJoinColumns() default {}
arreglo de columnas que definen la llave foráneo al objeto relacionado
UniqueConstraint[] uniqueConstraints()
![Page 34: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/34.jpg)
Many-To-Many (Muchos-a-Muchos)
![Page 35: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/35.jpg)
Man
yToM
any
Uni-direccional
Bi-direccional
![Page 36: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/36.jpg)
Man
yToM
any
Uni-Direccional
• Una clase (“owner”) conoce la relación• usa @ManyToMany
• Esta clase define el mapeo a la base de datos usando un Join (o “link”) table• usa @JoinTable
Bi-Direccional
• Ambas clases conocen la relación• Usan @ManyToMany
• El dueño de la relación define el mapeo a la base de datos• Usa @JoinTable
• El lado inverso señala la propiedad de la clase dueña que define el mapeo a la base de datos• Usa
@ManyToMany(mappedBy=«remote property»)
![Page 37: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/37.jpg)
Anot
ació
n @
Man
yToM
any public interface ManyToMany extends ... {
Class targetEntity() default void.classclase entidad a la que está relacionadausualmente se determina por el tipo de la propiedad
CascadeType[] cascade() default {}define que operaciones de persistencia se realizan en modo cascada sobre el objeto relacionado
FetchType fetch() default EAGERdefine el modo de carga del objeto relacionado
String mappedBy() default “”usado solo en relaciones bidireccionales en el lado inverso de la relaciónseñala la propiedad remota en la clase dueña de la relación que define el mapeo a la base de datos
![Page 38: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/38.jpg)
ALL- combinación de todos los tiposPERSIST- objetos relacionados son automáticamente administrados y serán persistentes en la base de datos cuando han sido relacionado a este objetoREMOVE- objetos relacionados son eliminados de la base de datos cuando este objeto es eliminadoREFRESH- objetos relacionados traerán su “estado” de la base de datos cuando este objeto es “refrescado”MERGE- objetos relacionados actualizarán su “estado” en la base de datos cuando este objeto es actualizado
TIPOS DE CASCADA
![Page 39: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/39.jpg)
JPA contiene anotaciones que permiten mapear herencia entre clases a la base de datos.
Existen algunas estrategias para realizar esto:- Tabla Única- Tabla por Clase Concreta- Tabla por Clase (Join)
MAPEO DE HERENCIA DE OBJETOS
![Page 40: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/40.jpg)
Estr
ateg
ia d
e H
eren
cia:
Tab
la
Úni
ca
![Page 41: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/41.jpg)
Resu
men
de
la e
stra
tegi
a :
Tabl
a Ú
nica
Ventajas• El más simple a implementar.• El rendimiento de esta estrategia es mejor que las
otras estrategias.
Desventajas• Campos sin usar• Todos los campos deben aceptar nulos• No esta normalizado
Jerarquía con subtipos• Mas adecuado que en primera instancia difieren
únicamente por el comportamiento.• Mas adecuado si no se tiene requerimientos de datos
únicos
![Page 42: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/42.jpg)
Anot
ació
n @
Dis
crim
inat
orCo
lum
npublic interface DiscriminatorColumn extends ... {
define una columna en la tabla que señala el tipo de fila
String name() default “DTYPE”Nombre de la columna que almacena el tipo de la fila
DiscriminatorType discriminatorType() default STRINGTipo de dato de la columna “name”
String columnDefinition();Definición explicita de la columna
int length()Longitud de la cadena para tipos STRING
enum DiscriminatorTypeSTRINGCHARINTEGER
![Page 43: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/43.jpg)
Anot
ació
n @
Dis
crim
inat
orVa
lue
public interface DiscriminatorValue extends ... {Define el valor de la columna para la columna discriminadora
String value() por defectoString – nombre de la entidadCHAR – valor específicoINTEGER – valor específico
![Page 44: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/44.jpg)
Anot
ació
n @
Inhe
ritan
cepublic interface Inheritance extends ...{
InheritanceType strategy() por defecto SINGLE_TABLE
enum InheritanceTypeSINGLE_TABLE
Una tabla raiz por cada jerarquía de clasesTABLE_PER_CLASS
Una tabla por cada clase concretaJOINED
Una tabla por cada clase en la jerarquía
![Page 45: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/45.jpg)
Estr
ateg
ia d
e H
eren
cia:
Tab
la
por C
lase
Con
cret
a
![Page 46: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/46.jpg)
Resu
men
de
la e
stra
tegi
a :
Tabl
a po
r Cla
se C
oncr
eta
Ventajas • Podría tener campos nulos.• Permite restricciones definidas en la base de datos.
Desventajas• Columnas redundantes en múltiples tablas.• Requiere mas esfuerzo en la implementación• No-normalizado• Menos deseable desde el punto de vista del rendimiento y
portabilidad
Jerarquía con subtipos • Mas adecuado si that do not need to be manipulated with sibling types
![Page 47: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/47.jpg)
Estr
ateg
ia d
e H
eren
cia:
Tab
la
por S
ub-C
lase
(Joi
n)
![Page 48: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/48.jpg)
Resu
men
de
la e
stra
tegi
a :
Tabl
a po
r Sub
-Cla
se (J
oin)
Ventajas• Normalizado.• Podría tener campos nulos.• Permite restricciones definidas en la base de datos.
Desventajas • Requiere «join»
Jerarquía con subtipos• Mas adecuado si existen requerimientos de
propiedad únicas.• Mas adecuado si existen restricciones de base de
datos.• Mas aecuado si queried across sibling types
![Page 49: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/49.jpg)
Implementación de un flujo de trabajo
Interactúa con otros beans
Accede directamente a la base de datos- operaciones «bulky»
Ejemplo: Registrar Cuenta
vs. Entity Beans- representan datos compartidos en la base de datos- interactúa con datos generalmente al nivel individual de
objeto-fila- Ejemplo: Cuenta
BEANS DE SESIÓN
![Page 50: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/50.jpg)
Ejemplo de un flujo de trabajo bajo el patrón DAO
Cl i ent
User Tr ansact i on Account D AO
f romA ccountAccount
toA ccountAccount
7. 1:
6. 1:
4. 1: < const r uct or > ( )
2. 1: < const r uct or > ( )
8: com m i t ( ) : voi d
7: updat eAccount ( account : Account ) : voi d
6: updat eAccount ( account : Account ) : voi d
5: deposi t ( doubl e) : voi d
4: findAccount ( i nt ) : Account
3: w i t hdr aw ( am ount : doubl e) : voi d
2: findAccount ( i nt ) : Account
1: begi n( ) : voi d
![Page 51: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/51.jpg)
Los bean de sesión eliminan la complejidad en el flujo de trabajo en el Cliente
f rom A ccountAccount
toA ccountAccount
Cl i ent
Tel l er Account D AO
1. 7. 1:
1. 6. 1:
1. 1. 1: < const r uct or > ( )
1. 7: updat eAccount ( ) : voi d
1. 6: updat eAccount ( ) : voi d
1. 5: depos i t ( doubl e) : voi d
1. 4: < const r uct or > ( )
1. 3: findAccount ( i nt ) : Account
1. 2: w i t hdr aw ( ) : voi d
1. 1: findAccount ( i nt ) : Account
1: t r ans f er ( f r om Account : i nt , t oAccount : i nt , am ount : doubl e) : voi d
t r ansact i on i s bei ng done by t he EJ BCont ai ner i n t hi s exam pl e
![Page 52: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/52.jpg)
Bean
s de
Ses
ión
Stat
eles
s/St
atef
ul
Stateless
• No mantiene un estado de conversación.• Cada método ignora que sucedió antes y lo que
sucederá después.• Mantiene un estado de implementación.
• Se comparte entre invocaciones de clientes por separado.
• Un conjunto de procedimientos o un batch de comandos que toman un conjunto de parámetros y retorna un resultado.
• El mas “económico” de implementar, desplegar y escalar.
Stateful
• Mantiene un estado de conversación.• El objeto puede acceder a los valores en caché en
distintas invocaciones• Mantiene un estado de implementación.
• No se comparte entre invocaciones de clientes/objetos por separado.• Los recursos son ubicados para realizar el
trabajo de una única instancia de bean de sesión Stateful. Esa instancia está atada al estado del cliente.
• Capaz de reaccionar a los estados de transacción• p.e. publica un mensaje de error en una
transacción rollback.
![Page 53: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/53.jpg)
JSF pone a disposición del web-master una herramienta muy útil para la conversión de datos entre la vista y el bean administrado
Y como todo en Java, existen casos cuando uno necesita su «converter» personalizados. JSF ofrece un marco de trabajo para el desarrollo de «custom converters»
JSF tiene un mecanismo de validación de datos, el cual ocurre antes que los datos del componente GUI actualicen el modelo en el bean administrado
CONVERTER Y VALIDATOR
![Page 54: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/54.jpg)
Mod
elo
de C
onve
rsió
n
Vistas del Componente GUI• Vista del Modelo
• en el cual los datos son representados como tipos de datos (int, long, double).
• Vista de la Presentación• en el cual los datos son representados de tal manera que el usuario pueda
leerlos y/o modificarlos (java.util.date, ‘dd/mm/yyyy’).
Lo usual• JSF automáticamente convierte los datos del componente entre estas dos
vistas cuando la el tipo de datos de la propiedad del bean administrado asociado al componente es del tipo de dato soportado por el componente.
Que sucede si … ?• Cuando queremos mostrar datos que no son estándares, la
tecnologia JSF nos permite registrar un Converter personalizado para ese tipo de dato.
![Page 55: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/55.jpg)
Paso
s pa
ra c
rear
un Co
nverter
El desarrollador de aplicaciones debe
implementar la clase Converter en
una clase CustomConverter.
El arquitecto de la aplicacion debe
registrar el Converter en el
faces-config.xml.
El autor HTML debe hacer
referencia desde los componentes
GUI hacia el CustomConverter.
![Page 56: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/56.jpg)
Converters de JSFBigDecimalConverterBigIntegerConverterBooleanConverterByteConverterCharacterConverterDateTimeConverterDoubleConverterFloatConverterIntegerConverterLongConverterNumberConverterShortConverter
Todos estos Converters tienen un error asociado a ellos, de tal forma que de no pasar la conversión, el error se visualizará en la pagina.
DateTimeConverter y NumberConverter tienen sus propias etiquetas, esto nos dice que podemos configurar el formato de los datos del componente a través de los atributos de la etiqueta.
![Page 57: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/57.jpg)
Mod
elo
de V
alid
ació
n
Métodos de Validación• Implementar la interfaz Validator que realiza la validación• Implementar un método de validación en el bean administrado
Lo usual• JSF provee un conjunto de Validadores estándares para que el Autor
HTML los inserte en las paginas web, éstos ya están listo para utilizarse.
![Page 58: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/58.jpg)
LongRange Validator
Nótese que existe un mensaje enlazado a la caja de texto, el cual capturará los mensajes de error que se disparen.
Nótese que los valores máximo y mínimo del validador se pueden enlazar a propiedades de un bean administrado.
![Page 59: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/59.jpg)
3 Resumen
![Page 60: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/60.jpg)
» Esta es la arquitectura de desarrollo que debemos respetar desde el inicio de la implementación hasta el despliegue de una aplicación empresarial.
» Esta clase ha tocado las 3 capas de las 5 propuestas. ¿Cuales son estas 3 capas?
RESUMEN
Session Beans Seguridad
Entidades del Negocio
EJB
Controladores Delegados
Archivos de Configuración
WAR
WAR
Interfaces de Usuario
Componentes GUI Personalizados
Richfaces 3.x
My F
aces 1.7
Java Mail
utilitarios
EAR
![Page 61: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/61.jpg)
» Lados de una relación» Lado dueño e inverso
» Tipos de relación» OneToOne
» Unidireccional, Bidireccional» ManyToOne
» Unidireccional, Bidireccional» OneToMany
» Unidireccional (bidireccional igual que en ManyToOne)» ManyToMany
» Unidireccional, Bidireccional» Tipos de colección
» Collection, List, Set, Map» Tipo de Carga (Fetch)
» EAGER y LAZY» Tipo de Cascada
» ALL, PERSIST, REMOVE, MERGE, REFRESH
RESUMEN
![Page 62: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/62.jpg)
» Estrategias de Herencia» Única Tabla por Herencia de Clases
» Simple, rápido, no-normalizado, sin restricciones en base de datos» Tabla por Clase Concreta
» No-normalizado, difícil de manejar polifórmicamente.» Menos portabilidad entre gestores de bases de datos
» Tabla por Sub-Clase (Join)» Normalizado, capaz de definir restricciones
» Converter y Validator» Una de las más grandes ventajas de la tecnología de Java Server Faces es que ofrece un
conjunto de componentes que nos permiten concentrarnos en el proceso de desarrollo.» Más aún, nos permite reutilizar sus interfaces de tal forma que podemos crear componentes
personalizados.
RESUMEN
![Page 63: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/63.jpg)
GRACIAS
![Page 64: P2C5 Introducción a JEE5 - II](https://reader034.fdocuments.es/reader034/viewer/2022052506/5572c58cd8b42abb378b49f3/html5/thumbnails/64.jpg)
O también puedes encontrarla
en .
Saludos!
AULA VIRTUALEncuentra esta presentación en el