Aurelio Martín Obando Távaraaot@upnorte.edu.peproyectos iiINTRODUCCIÓN A JEE5 – PARTE II
EnalteciendoLos Temas1321EntidadesConverter y ValidatorBeans de Sesión
AGENDA EntidadesBeans de SesiónConverter y ValidatorResumenClase 051
2CONTENIDO
	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
	Toda entidad debe tener una llave primariaPuede mapearse a una (llave primaria simple) o más (llave primaria compuesta) propiedades Consiste de múltiples llaves primarias simplesLAVES PRIMARIAS COMPUESTAS
Consiste de múltiples llaves primariasPuede ser representada por un clase “Primary Key” que…debe ser SerializablepublicclassMowerPKimplementsjava.io.Serializable {debe tener un constructor público sin paso de parámetrospublicMowerPK() { … }debe implementar los métodos equals() y hashCode()publicinthashCode() { ... }publicbooleanequals(Objectobj) { ... }LlavesPrimariasCompuestas
No es usada internamente por clases persistentesUsado por el EntityManagerEjemplo 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)		)Usando una Clase Primary Key como un IdClass
packageejava.examples.orm.core;importjava.io.Serializable;publicclassMowerPKimplementsSerializable {privatestatic final longserialVersionUID = 1L;privateStringmake;privateStringmodel;publicMowerPK() { … }publicMowerPK(Stringmake, Stringmodel) {this.make = make;this.model = model;    }publicstaticlonggetSerialVersionUID() {returnserialVersionUID;    }publicStringgetMake() {returnmake;    }privatevoidsetMake(Stringmake) {this.make = make;    }…Ejemplo de Clase Compuesta PK
…publicStringgetModel() {returnmodel;    }privatevoidsetModel(Stringmodel) {this.model = model;    }publicinthashCode() {returnmake.hashCode() + model.hashCode();    }publicbooleanequals(Objectobj) {        try {if (this == obj) return true;returnmake.equals(((MowerPK)obj).getMake()) &&model.equals(((MowerPK)obj).getModel());        } catch (Throwableignored) { return false;        }    }    publicStringtoString() {returnsuper.toString() + ", make=" + make+ ", model=" + model;    }}Ejemplo de Clase Compuesta PK (Cont.)
packageejava.examples.orm.core.annotated;importjava.io.Serializable;importjavax.persistence.*;importejava.examples.orm.core.MowerPK;@Entity@Table(name="MOWER")@IdClass(MowerPK.class)publicclassMowerimplementsSerializable {privatestatic final longserialVersionUID = 1L;privateStringmake;privateStringmodel;    privateintsize;publicMower() { … }publicMower(Stringmake, Stringmodel) {this.make = make;this.model = model;}…Ejemplo de uso de un IdClass
…@Id    @Column(nullable=false, updatable=false)publicStringgetMake() {returnmake;    }privatevoidsetMake(Stringmake) {this.make = make;    }@Id    @Column(nullable=false, updatable=false)publicStringgetModel() {returnmodel;    }privatevoidsetModel(Stringmodel) {this.model = model;    }publicintgetSize() {returnsize;    }publicvoidsetSize(intsize) {this.size = size;}}Ejemplo de uso de un IdClass(Cont.)
Esquemade base de datoscreate table NAPSACK (	NAPSACK_MAKE varchar(255) not null, 	NAPSACK_MODEL varchar(255) not null, 	size integer not null, 	primary key (NAPSACK_MAKE, NAPSACK_MODEL))Usando un clase Primary Key como un EmbeddedId
package ejava.examples.orm.core.annotated;import java.io.Serializable;import javax.persistence.*;@Embeddablepublic class NapsackPKimplements 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;    }…Ejemplo de EmbeddedId
@Column(name="NAPSACK_MODEL")    public String getModel() {        return model;    }    public void setModel(String model) {this.model = model;    }    public inthashCode() {        return make.hashCode() + model.hashCode();}    public booleanequals(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;}}Ejemplo de EmbeddedId(Cont.)
package 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 NapsackPKpk;    private int size;    public Napsack() {}    public Napsack(String make, String model) {        this.pk = new NapsackPK(make, model);    }@EmbeddedId    public NapsackPKgetPk() {        return pk;    }    public void setPk(NapsackPKpk) {        this.pk = pk;    }    …}Ejemplo de uso de EmbeddedIdusando Anotaciones
	JPA reconoce y mapea las relaciones en el modelo de datos relacional y lo translada a las clases en el modelo de dominioDe 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 JPAEstas anotaciones también son susceptible a cierta optimización de acuerdo a ciertas características que veremos a continuaciónMAPEO DE OBJETOS Y RELACIONES
One-To-One (Uno-a-Uno)
Uni-direccionalBi-direccionalOneToOne
OneToOne
public interface OneToOne extends ... {Class targetEntity() default void.classclaseentidad a la queestárelacionadausualmente se determinapor el tipo de la propiedadCascadeType[] cascade() default {}	define queoperaciones de persistencia se realizan en modocascadasobre el objetorelacionadoFetchType fetch() default EAGER	define el modo de carga del objetorelacionadoboolean optional() default true	define siwl valor de la relaciónpuedesernula o noString mappedBy() default “”usado solo en relacionesbidireccionales en el ladoinverso 	de la relaciónseñala la propiedadremota en la clasedueña de la relaciónque define el mapeo a la base de datosAnotación @OneToOne
public interface JoinColumns extends ... {public abstract JoinColumn[] value();define un arreglo de claves foráneasque son parte de unallaveprimariacompuestaExample Usage@OneToOne	@JoinColumns({		@JoinColumn(...),		@JoinColumn(...)	})Anotación @JoinColumns
Many-To-One (Muchos-a-Uno)
Uni-direccionalBi-direccionalManyToOne
ManyToOne
public interface ManyToOneextends ... {Class targetEntity() default void.classclaseentidad a la queestárelacionadausualmente se determinapor el tipo de la propiedadCascadeType[] cascade() default {}	define queoperaciones de persistencia se realizan en modocascadasobre el objetorelacionadoFetchType fetch() default EAGER	define el modo de carga del objetorelacionadoboolean optional() default true	define siwl valor de la relaciónpuedesernula o noAnotación @ManyToOne
public interface OneToManyextends ... {Class targetEntity() default void.classclaseentidad a la queestárelacionadausualmente se determinapor el tipo de la propiedadCascadeType[] cascade() default {}	define queoperaciones de persistencia se realizan en modocascadasobre el objetorelacionadoFetchType fetch() default EAGER	define el modo de carga del objetorelacionadoString mappedBy() default “”usado solo en relacionesbidireccionales en el ladoinverso 	de la relaciónseñala la propiedadremota en la clasedueña de la relaciónque define el mapeo a la base de datosAnotación @OneToMany
Modificando una lista de objetos
One-To-Many (Uno-a-Muchos)
Uni-direccionalOneToMany
OneToMany
Link/JoinTable
public interface JoinTable extends ... {muy similar a la anotación @TableString name() default “”nombre de la tablapara la tabla “join”String catalog() default “”nombre de la base de datosString schema() default “”nombre del esquemaJoinColumn[] joinColumns() default {}arreglo de columnasquedefinen la clave foranea a esteobjetoJoinColumn[] inverseJoinColumns() default {}arreglo de columnasquedefinen la llaveforáneo al objetorelacionadoUniqueConstraint[] uniqueConstraints()Anotación @JoinTable
Many-To-Many (Muchos-a-Muchos)
Uni-direccionalBi-direccionalManyToMany
ManyToMany
public interface ManyToManyextends ... {Class targetEntity() default void.classclaseentidad a la queestárelacionadausualmente se determinapor el tipo de la propiedadCascadeType[] cascade() default {}	define queoperaciones de persistencia se realizan en modocascadasobre el objetorelacionadoFetchType fetch() default EAGER	define el modo de carga del objetorelacionadoString mappedBy() default “”usado solo en relacionesbidireccionales en el ladoinverso 	de la relaciónseñala la propiedadremota en la clasedueña de la relaciónque define el mapeo a la base de datosAnotación @ManyToMany
ALL- combinación de todos los tiposPERSIST- objetosrelacionados son automáticamenteadministrados y seránpersistentes en la base de datoscuandohansidorelacionado a esteobjetoREMOVE- objetosrelacionados son eliminados de la base de datoscuandoesteobjetoeseliminadoREFRESH- objetosrelacionadostraeránsu “estado” de la base de datoscuandoesteobjetoes “refrescado”MERGE- objetosrelacionadosactualizaránsu “estado” en la base de datoscuandoesteobjetoesactualizadoTIPOS DE CASCADA
	JPA contiene anotaciones que permiten mapear herencia entre clases a la base de datos.Existen algunas estrategias para realizar esto:- TablaÚnica- TablaporClaseConcreta- TablaporClase(Join)MAPEO DE HERENCIA DE OBJETOS
Estrategia de Herencia: Tabla Única
Resumen de la estrategia : Tabla Única
public interface DiscriminatorColumn extends ... {define unacolumna en la tablaqueseñala el tipo de filaString name() default “DTYPE”Nombre de la columnaquealmacena el tipo de la filaDiscriminatorTypediscriminatorType() default STRINGTipo de dato de la columna “name”String columnDefinition();Definiciónexplicita de la columnaint length()Longitud de la cadenaparatipos STRINGenumDiscriminatorTypeSTRINGCHARINTEGERAnotación @DiscriminatorColumn
public interface DiscriminatorValue extends ... {Define el valor de la columnapara la columnadiscriminadoraString value() pordefectoString 	– 	nombre de la entidadCHAR 	– 	valorespecíficoINTEGER 	– 	valorespecíficoAnotación @DiscriminatorValue
public interface Inheritance extends ...{InheritanceTypestrategy() pordefectoSINGLE_TABLEenumInheritanceTypeSINGLE_TABLEUnatablaraizporcadajerarquía de clasesTABLE_PER_CLASSUnatablaporcadaclaseconcretaJOINEDUnatablaporcadaclase en la jerarquíaAnotación @Inheritance
Estrategia de Herencia: Tabla por Clase Concreta
Resumen de la estrategia : Tabla por Clase Concreta
Estrategia de Herencia: Tabla por Sub-Clase (Join)
Resumen de la estrategia : Tabla por Sub-Clase (Join)
	Implementación de un flujo de trabajoInteractúa con otros beansAccede directamente a la base de datos- operaciones «bulky»Ejemplo: Registrar Cuentavs. EntityBeans- representan datos compartidos en la base de datos- interactúa con datos generalmente al nivel individual de objeto-fila- Ejemplo: CuentaBEANS DE SESIÓN
Ejemplo de un flujo de trabajo bajo el patrón DAO
Los bean de sesión eliminan la complejidad en el flujo de trabajo en el Cliente
Beans de Sesión Stateless/Stateful
	JSF pone a disposición del web-master una herramienta muy útil para la conversión de datos entre la vista y el bean administradoY como todo en Java, existen casos cuando uno necesita su «converter» personalizados. JSF ofrece un marco de trabajo para el desarrollo de «customconverters»JSF tiene un mecanismo de validación de datos, el cual ocurre antes que los datos del componente GUI actualicen el modelo en el beanadministradoCONVERTER Y VALIDATOR
Modelo de Conversión
Pasos para crear un Converter
Converters de JSFBigDecimalConverterBigIntegerConverterBooleanConverterByteConverterCharacterConverterDateTimeConverterDoubleConverterFloatConverterIntegerConverterLongConverterNumberConverterShortConverterTodosestosConverterstienen 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.
Modelo de Validación
LongRangeValidatorNó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.
3Resumen
WARInterfaces de UsuarioComponentes GUI PersonalizadosEAREJBWARRichfaces 3.xMy Faces 1.7Java MailArchivos de ConfiguraciónControladoresDelegadosutilitariosEntidades del NegocioSessionBeansSeguridadRESUMENEsta 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?RESUMENLados de una relación
Lado dueño e inverso
Tipos de relación
OneToOne

P2C5 Introducción a JEE5 - II

  • 1.
    Aurelio Martín ObandoTávaraaot@upnorte.edu.peproyectos iiINTRODUCCIÓN A JEE5 – PARTE II
  • 2.
  • 3.
    AGENDA EntidadesBeans deSesiónConverter y ValidatorResumenClase 051
  • 4.
  • 5.
    Una entidad esun 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
  • 6.
    Toda entidad debetener una llave primariaPuede mapearse a una (llave primaria simple) o más (llave primaria compuesta) propiedades Consiste de múltiples llaves primarias simplesLAVES PRIMARIAS COMPUESTAS
  • 7.
    Consiste de múltiplesllaves primariasPuede ser representada por un clase “Primary Key” que…debe ser SerializablepublicclassMowerPKimplementsjava.io.Serializable {debe tener un constructor público sin paso de parámetrospublicMowerPK() { … }debe implementar los métodos equals() y hashCode()publicinthashCode() { ... }publicbooleanequals(Objectobj) { ... }LlavesPrimariasCompuestas
  • 8.
    No es usadainternamente por clases persistentesUsado por el EntityManagerEjemplo 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) )Usando una Clase Primary Key como un IdClass
  • 9.
    packageejava.examples.orm.core;importjava.io.Serializable;publicclassMowerPKimplementsSerializable {privatestatic finallongserialVersionUID = 1L;privateStringmake;privateStringmodel;publicMowerPK() { … }publicMowerPK(Stringmake, Stringmodel) {this.make = make;this.model = model; }publicstaticlonggetSerialVersionUID() {returnserialVersionUID; }publicStringgetMake() {returnmake; }privatevoidsetMake(Stringmake) {this.make = make; }…Ejemplo de Clase Compuesta PK
  • 10.
    …publicStringgetModel() {returnmodel; }privatevoidsetModel(Stringmodel) {this.model = model; }publicinthashCode() {returnmake.hashCode() + model.hashCode(); }publicbooleanequals(Objectobj) { try {if (this == obj) return true;returnmake.equals(((MowerPK)obj).getMake()) &&model.equals(((MowerPK)obj).getModel()); } catch (Throwableignored) { return false; } } publicStringtoString() {returnsuper.toString() + ", make=" + make+ ", model=" + model; }}Ejemplo de Clase Compuesta PK (Cont.)
  • 11.
    packageejava.examples.orm.core.annotated;importjava.io.Serializable;importjavax.persistence.*;importejava.examples.orm.core.MowerPK;@Entity@Table(name="MOWER")@IdClass(MowerPK.class)publicclassMowerimplementsSerializable {privatestatic finallongserialVersionUID = 1L;privateStringmake;privateStringmodel; privateintsize;publicMower() { … }publicMower(Stringmake, Stringmodel) {this.make = make;this.model = model;}…Ejemplo de uso de un IdClass
  • 12.
    …@Id @Column(nullable=false, updatable=false)publicStringgetMake() {returnmake; }privatevoidsetMake(Stringmake) {this.make = make; }@Id @Column(nullable=false, updatable=false)publicStringgetModel() {returnmodel; }privatevoidsetModel(Stringmodel) {this.model = model; }publicintgetSize() {returnsize; }publicvoidsetSize(intsize) {this.size = size;}}Ejemplo de uso de un IdClass(Cont.)
  • 13.
    Esquemade base dedatoscreate table NAPSACK ( NAPSACK_MAKE varchar(255) not null, NAPSACK_MODEL varchar(255) not null, size integer not null, primary key (NAPSACK_MAKE, NAPSACK_MODEL))Usando un clase Primary Key como un EmbeddedId
  • 14.
    package ejava.examples.orm.core.annotated;import java.io.Serializable;importjavax.persistence.*;@Embeddablepublic class NapsackPKimplements 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; }…Ejemplo de EmbeddedId
  • 15.
    @Column(name="NAPSACK_MODEL") public String getModel() { return model; } public void setModel(String model) {this.model = model; } public inthashCode() { return make.hashCode() + model.hashCode();} public booleanequals(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;}}Ejemplo de EmbeddedId(Cont.)
  • 16.
    package ejava.examples.orm.core.annotated;import java.io.Serializable;importjavax.persistence.*;@Entity@Table(name="NAPSACK")public class Napsack implements Serializable { private static final long serialVersionUID = 1L; private NapsackPKpk; private int size; public Napsack() {} public Napsack(String make, String model) { this.pk = new NapsackPK(make, model); }@EmbeddedId public NapsackPKgetPk() { return pk; } public void setPk(NapsackPKpk) { this.pk = pk; } …}Ejemplo de uso de EmbeddedIdusando Anotaciones
  • 17.
    JPA reconoce ymapea las relaciones en el modelo de datos relacional y lo translada a las clases en el modelo de dominioDe 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 JPAEstas anotaciones también son susceptible a cierta optimización de acuerdo a ciertas características que veremos a continuaciónMAPEO DE OBJETOS Y RELACIONES
  • 18.
  • 19.
  • 20.
  • 21.
    public interface OneToOneextends ... {Class targetEntity() default void.classclaseentidad a la queestárelacionadausualmente se determinapor el tipo de la propiedadCascadeType[] cascade() default {} define queoperaciones de persistencia se realizan en modocascadasobre el objetorelacionadoFetchType fetch() default EAGER define el modo de carga del objetorelacionadoboolean optional() default true define siwl valor de la relaciónpuedesernula o noString mappedBy() default “”usado solo en relacionesbidireccionales en el ladoinverso de la relaciónseñala la propiedadremota en la clasedueña de la relaciónque define el mapeo a la base de datosAnotación @OneToOne
  • 22.
    public interface JoinColumnsextends ... {public abstract JoinColumn[] value();define un arreglo de claves foráneasque son parte de unallaveprimariacompuestaExample Usage@OneToOne @JoinColumns({ @JoinColumn(...), @JoinColumn(...) })Anotación @JoinColumns
  • 23.
  • 24.
  • 25.
  • 26.
    public interface ManyToOneextends... {Class targetEntity() default void.classclaseentidad a la queestárelacionadausualmente se determinapor el tipo de la propiedadCascadeType[] cascade() default {} define queoperaciones de persistencia se realizan en modocascadasobre el objetorelacionadoFetchType fetch() default EAGER define el modo de carga del objetorelacionadoboolean optional() default true define siwl valor de la relaciónpuedesernula o noAnotación @ManyToOne
  • 27.
    public interface OneToManyextends... {Class targetEntity() default void.classclaseentidad a la queestárelacionadausualmente se determinapor el tipo de la propiedadCascadeType[] cascade() default {} define queoperaciones de persistencia se realizan en modocascadasobre el objetorelacionadoFetchType fetch() default EAGER define el modo de carga del objetorelacionadoString mappedBy() default “”usado solo en relacionesbidireccionales en el ladoinverso de la relaciónseñala la propiedadremota en la clasedueña de la relaciónque define el mapeo a la base de datosAnotación @OneToMany
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
    public interface JoinTableextends ... {muy similar a la anotación @TableString name() default “”nombre de la tablapara la tabla “join”String catalog() default “”nombre de la base de datosString schema() default “”nombre del esquemaJoinColumn[] joinColumns() default {}arreglo de columnasquedefinen la clave foranea a esteobjetoJoinColumn[] inverseJoinColumns() default {}arreglo de columnasquedefinen la llaveforáneo al objetorelacionadoUniqueConstraint[] uniqueConstraints()Anotación @JoinTable
  • 34.
  • 35.
  • 36.
  • 37.
    public interface ManyToManyextends... {Class targetEntity() default void.classclaseentidad a la queestárelacionadausualmente se determinapor el tipo de la propiedadCascadeType[] cascade() default {} define queoperaciones de persistencia se realizan en modocascadasobre el objetorelacionadoFetchType fetch() default EAGER define el modo de carga del objetorelacionadoString mappedBy() default “”usado solo en relacionesbidireccionales en el ladoinverso de la relaciónseñala la propiedadremota en la clasedueña de la relaciónque define el mapeo a la base de datosAnotación @ManyToMany
  • 38.
    ALL- combinación detodos los tiposPERSIST- objetosrelacionados son automáticamenteadministrados y seránpersistentes en la base de datoscuandohansidorelacionado a esteobjetoREMOVE- objetosrelacionados son eliminados de la base de datoscuandoesteobjetoeseliminadoREFRESH- objetosrelacionadostraeránsu “estado” de la base de datoscuandoesteobjetoes “refrescado”MERGE- objetosrelacionadosactualizaránsu “estado” en la base de datoscuandoesteobjetoesactualizadoTIPOS DE CASCADA
  • 39.
    JPA contiene anotacionesque permiten mapear herencia entre clases a la base de datos.Existen algunas estrategias para realizar esto:- TablaÚnica- TablaporClaseConcreta- TablaporClase(Join)MAPEO DE HERENCIA DE OBJETOS
  • 40.
  • 41.
    Resumen de laestrategia : Tabla Única
  • 42.
    public interface DiscriminatorColumnextends ... {define unacolumna en la tablaqueseñala el tipo de filaString name() default “DTYPE”Nombre de la columnaquealmacena el tipo de la filaDiscriminatorTypediscriminatorType() default STRINGTipo de dato de la columna “name”String columnDefinition();Definiciónexplicita de la columnaint length()Longitud de la cadenaparatipos STRINGenumDiscriminatorTypeSTRINGCHARINTEGERAnotación @DiscriminatorColumn
  • 43.
    public interface DiscriminatorValueextends ... {Define el valor de la columnapara la columnadiscriminadoraString value() pordefectoString – nombre de la entidadCHAR – valorespecíficoINTEGER – valorespecíficoAnotación @DiscriminatorValue
  • 44.
    public interface Inheritanceextends ...{InheritanceTypestrategy() pordefectoSINGLE_TABLEenumInheritanceTypeSINGLE_TABLEUnatablaraizporcadajerarquía de clasesTABLE_PER_CLASSUnatablaporcadaclaseconcretaJOINEDUnatablaporcadaclase en la jerarquíaAnotación @Inheritance
  • 45.
    Estrategia de Herencia:Tabla por Clase Concreta
  • 46.
    Resumen de laestrategia : Tabla por Clase Concreta
  • 47.
    Estrategia de Herencia:Tabla por Sub-Clase (Join)
  • 48.
    Resumen de laestrategia : Tabla por Sub-Clase (Join)
  • 49.
    Implementación de unflujo de trabajoInteractúa con otros beansAccede directamente a la base de datos- operaciones «bulky»Ejemplo: Registrar Cuentavs. EntityBeans- representan datos compartidos en la base de datos- interactúa con datos generalmente al nivel individual de objeto-fila- Ejemplo: CuentaBEANS DE SESIÓN
  • 50.
    Ejemplo de unflujo de trabajo bajo el patrón DAO
  • 51.
    Los bean desesión eliminan la complejidad en el flujo de trabajo en el Cliente
  • 52.
    Beans de SesiónStateless/Stateful
  • 53.
    JSF pone adisposición del web-master una herramienta muy útil para la conversión de datos entre la vista y el bean administradoY como todo en Java, existen casos cuando uno necesita su «converter» personalizados. JSF ofrece un marco de trabajo para el desarrollo de «customconverters»JSF tiene un mecanismo de validación de datos, el cual ocurre antes que los datos del componente GUI actualicen el modelo en el beanadministradoCONVERTER Y VALIDATOR
  • 54.
  • 55.
    Pasos para crearun Converter
  • 56.
    Converters de JSFBigDecimalConverterBigIntegerConverterBooleanConverterByteConverterCharacterConverterDateTimeConverterDoubleConverterFloatConverterIntegerConverterLongConverterNumberConverterShortConverterTodosestosConverterstienenun 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.
  • 57.
  • 58.
    LongRangeValidatorNótese que existeun 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.
  • 59.
  • 60.
    WARInterfaces de UsuarioComponentesGUI PersonalizadosEAREJBWARRichfaces 3.xMy Faces 1.7Java MailArchivos de ConfiguraciónControladoresDelegadosutilitariosEntidades del NegocioSessionBeansSeguridadRESUMENEsta es la arquitectura de desarrollo que debemos respetar desde el inicio de la implementación hasta el despliegue de una aplicación empresarial.
  • 61.
    Esta clase hatocado las 3 capas de las 5 propuestas. ¿Cuales son estas 3 capas?RESUMENLados de una relación
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
    ALL, PERSIST, REMOVE,MERGE, REFRESHRESUMENEstrategias de Herencia
  • 78.
    Única Tabla porHerencia de Clases
  • 79.
    Simple, rápido, no-normalizado,sin restricciones en base de datos
  • 80.
  • 81.
    No-normalizado, difícil demanejar polifórmicamente.
  • 82.
    Menos portabilidad entregestores de bases de datos
  • 83.
  • 84.
    Normalizado, capaz dedefinir restricciones
  • 85.
  • 86.
    Una de lasmá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.
  • 87.
    Más aún, nospermite reutilizar sus interfaces de tal forma que podemos crear componentes personalizados.GRACIAS
  • 88.
    Encuentra esta presentaciónen elAULA VIRTUAL O tambiénpuedesencontrarlaen . Saludos!

Notas del editor