53
Aurelio Martín Obando Távara [email protected] proyectos ii INTRODUCCIÓN A JEE5

P2C2 Introducción a JEE5

Embed Size (px)

DESCRIPTION

Esta presentación les mostrará la versión básico de ciertos componentes empresariales de la versión JEE5.

Citation preview

Page 1: P2C2 Introducción a JEE5

Aurelio Martín Obando Tá[email protected]

proyectos ii

INTRODUCCIÓN A JEE5

Page 2: P2C2 Introducción a JEE5

Enalteciendo Los Temas

1 Entidades

2Beans de Sesión

3Delegados

Page 3: P2C2 Introducción a JEE5

AGENDA API de Persistencia de JavaEntidadesBeans de SesiónDelegadosResumen

Clase 02

1

Page 4: P2C2 Introducción a JEE5

2 CONTENIDO

Page 5: P2C2 Introducción a JEE5

API d

e Pe

rsis

tenc

ia d

e Ja

vaEl API de Persistencia de Java

brinda facilidad al momento de interactuar con la base de datos y hacer el mapeo de objeto/relación respecto a un modelo de datos relacional en sus aplicaciones.

JPA consiste en 3 áresEl API de Persistencia de Java.Mapeo de Objetos/Relaciones.El lenguaje Consultas.

Page 6: P2C2 Introducción a JEE5

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.

Formalmente y eventualmente llamados “Entity Beans”.

Clases listadas en el elemento “<class>” en el archivo “persistence.xml”.

No son persistentes hasta que están asociadas a un EntityManager.em.persist(author);

ENTIDADES

Page 7: P2C2 Introducción a JEE5

Entid

ades

Instanciado y usado como

cualquier otro POJO

•Bike bike = new Bike(1);

•bike.setMake("trek");

•bike.setModel("2200");

•bike.setSize(26);

Interactúa con

el Entity Manage

r

•para realizar operaciones sobre la base de datos. •em.persist(b

ike);

Debe

•Tener un constructor que no recibe parámetros

•Ser anotada con la anotación @Entity y @Table

•Tener por lo menos 1 campo/propiedad anotada con @Id

•Implementar la interfaz Serializable

•Implementar los métodos hashCode(), equals() y toString().

Page 8: P2C2 Introducción a JEE5

Ejem

plo

de E

ntida

d An

otad

a :

Bike

.java

package java.examples.orm.core.annotated;

import javax.persistence.*;

@Entitypublic class Bike { private long id; private String make; private String model; private int size; public Bike() {} public Bike(long id) { this.id = id; }

@Id public long getId() { return id; }

private void setId(long id) { this.id = id; } public String getMake() { return make; } public void setMake(String make) { this.make = make; }

...}

Page 9: P2C2 Introducción a JEE5

Ejem

plo

de E

ntida

d N

o-An

otad

a: B

ike.

java

package java.examples.orm.core.mapped;

public class Bike { private long id; private String make; private String model; private int size;

public Bike() {} public Bike(long id) { this.id = id; }

public long getId() { return id; } private void setId(long id) { this.id = id; } public String getMake() { return make; } public void setMake(String make) { this.make = make; }

...}

Page 10: P2C2 Introducción a JEE5

Nom

bre

de la

Enti

dad

Usado para determinar el nombre de la tabla automáticamente

Bike class Bike tableEl nombre de la Tabla puede ser especificado sin tener relación con el nombre de la entidad

@Table(name=”table_name”)

Usado para referenciar a una clase a través de EJB-QL

Page 11: P2C2 Introducción a JEE5

Estr

uctu

ra e

lem

enta

l de

map

eoMapeo

imprescindible•@Table.name – asigna el nombre de la tabla•@Column.name – asigna el nombre de la columna

Atributos de mayor detalle

•Necesario para generar el esquema de la base de datos•@Column•unique – la columna será definida como “unique”•nullable – la columna será definida como “nullable”•insertable – la columna será incluida en los sentencias insert•updatable – la columna será incluida en los sentencias update•table – mapea a una columna a una tabla•length – longitud de VARCHAR() cuando usamos String•scale – define # dígitos en los tipos NUMERIC•precision – defines # posiciones decimales en tipos NUMERIC

Page 12: P2C2 Introducción a JEE5

Ejem

plo

de u

n es

quem

a de

BD

a

map

ear

create table CAR (CAR_ID bigint not null, CAR_YEAR integer not null, CAR_MODEL varchar(20) not null, CAR_MAKE varchar(20) not null, CAR_COST double, primary key (CAR_ID)

)

Page 13: P2C2 Introducción a JEE5

Map

eo a

BD

usa

ndo

Anot

acio

nes

package java.examples.orm.core.annotated;

import javax.persistence.*;

@Entity@Table(name="CAR")public class Car { private long id; private String make; private String model; private int year; private double cost;

public Car() {} public Car(long id) { this.id = id; } @Id @Column(name="CAR_ID", nullable=false) public long getId() { return id; }

private void setId(long id) { this.id = id; }

Page 14: P2C2 Introducción a JEE5

Map

eo a

BD

usa

ndo

Anot

acio

nes

@Column(name="CAR_MAKE", unique=false, nullable=false, insertable=true,updatable=true,table="", //nota: podemos apuntar a otra tabla para obtener la propiedadlength=20)

public String getMake() { return make; } public void setMake(String make) { this.make = make; } @Column(name="CAR_MODEL", nullable=false, length=20) public String getModel() { return model; } public void setModel(String model) { this.model = model; }

Page 15: P2C2 Introducción a JEE5

Map

eo a

BD

usa

ndo

Anot

acio

nes

@Column(name="CAR_YEAR", nullable=false) public int getYear() { return year; } public void setYear(int year) { this.year = year; } @Column(name="CAR_COST", scale=7, precision=2) public double getCost() { return cost; } public void setCost(double cost) { this.cost = cost; }

...}

Page 16: P2C2 Introducción a JEE5

Toda entidad debe tener una llave primaria

Llaves primarias deben ser únicas

Puede mapearse a una (llave primaria simple) o más (llave primaria compuesta) propiedades

Las propiedades deben ser de tipo- tipos primitivos Java (incluido: Integer, Long, etc.)- java.lang.String- Clases de tipo llave primaria (compuesta de tipos de propiedades adecuados)

LAVES PRIMARIAS SIMPLES

Page 17: P2C2 Introducción a JEE5

Llav

es P

rimar

ias

gene

rada

s

public interface javax.persistence.GeneratedValue { javax.persistence.GenerationType strategy(); String generator();}

public final class javax.persistence.GenerationType extends java.lang.Enum{ public static final GenerationType TABLE; public static final GenerationType SEQUENCE; public static final GenerationType IDENTITY; public static final GenerationType AUTO;}

Page 18: P2C2 Introducción a JEE5

Tipo

de

Gen

erac

ión

IDEN

TITY

Permite que la

base de datos

genere la llave

primaria

•create table GADGET (•id bigint generado

por defecto como identidad (empezando en 1),

•make varchar(255), •primary key (id)

•)

Usando Anotaci

ones

•@Id•@GeneratedValue(str

ategy=GenerationType.IDENTITY)

•public long getId() {•return id;

•}

Page 19: P2C2 Introducción a JEE5

Transient- Le dice al proveedor de persistencia que ignore este campo/propiedadFetchType- Le dice a la persistencia el modo de carga de las relaciones de una objetoTemporal- Especifica detalle para el mapeo de propiedades tipo Date y CalendarLob- Mapea tipos BLOB y CLOBEnumerated- Mapea tipo Enumerado Java SE 5

REFINAMIENTO DE MAPEO

Page 20: P2C2 Introducción a JEE5

Uso

de

Tran

sien

t

Esquema de

base de

datos

•create table TANK (•id bigint not null, •make varchar(255),

•model varchar(255),

•primary key (id)•)

Usando

Transient

•package java.examples.orm.core.annotated;•import java.io.Serializable;•import javax.persistence.*;

•@Entity•@Table(name="TANK")•public class Tank implements Serializable {•private static final long serialVersionUID = 1L;•private long id; private String make; private String model;

•public Tank() {}•public Tank(long id) { this.id = id; }•@Id•public long getId() { return id; }•private void setId(long id) { this.id = id; }•@Transient •public String getMakeModel() { return make + " " + model; }

•//not there is no setMakeModel(String)•...

•}

Page 21: P2C2 Introducción a JEE5

Ejem

plo

de L

ob

Definición

•El tipo String es almacenado como CLOB (Character Large Object) o BLOB (Binary Large Object).

•Preferentemente etiquetar con FetchType.LAZY si no se va a necesitar de primera instancia.

Esquema de

base de

datos

•create table UMBRELLA (•id bigint not

null, •make

longvarchar, •model

varchar(255), •primary key

(id)•)

Page 22: P2C2 Introducción a JEE5

Ejem

plo

de L

obpackage java.examples.orm.core.annotated;

import java.io.Serializable;import javax.persistence.*;@Entity@Table(name=“UMBRELLA")public class Umbrella implements Serializable { private static final long serialVersionUID = 1L; private long id; private String make; private String model;

public Umbrella() { } public Umbrella(long id) { this.id = id; } @Id public long getId() { return id; } private void setId(long id) { this.id = id; } @Lob @Basic(fetch=FetchType.LAZY) public char[] getMake() { return make.toCharArray(); } public void setMake(char[] make) { this.make = new String(make); }

Page 23: P2C2 Introducción a JEE5

Tipo

Tem

pora

l y E

num

Temporal

•Date•Time•Timesta

mp

Enum

•Valor ordinal

•Valor String

Ejemplo de

esquema

•create table VASE (•id bigint not null, •ADate date, •ATime time, •ATimestamp timestamp, •colorId integer, •colorName

varchar(255), •primary key (id)

•)

Page 24: P2C2 Introducción a JEE5

Ejem

plo

con

tipo

Tem

pora

l y

Enumpackage java.examples.orm.core.annotated;

import java.io.Serializable;import java.util.Date;import javax.persistence.*;Import java.examples.orm.core.ColorType;

@Entity@Table(name="VASE")public class Vase implements Serializable { private static final long serialVersionUID = 1L; private long id; private Date aDate; private Date aTime; private Date aTimestamp; private ColorType colorId; private ColorType colorName;

public Vase() {} public Vase(long id) { this.id = id; }

Page 25: P2C2 Introducción a JEE5

Usa

ndo

Tem

pora

l Met

adat

a @Temporal(TemporalType.DATE)public Date getADate() {

return aDate;}public void setADate(Date date) {

aDate = date;} @Temporal(TemporalType.TIME)public Date getATime() {

return aTime;}public void setATime(Date time) {

aTime = time;} @Temporal(TemporalType.TIMESTAMP)public Date getATimestamp() {

return aTimestamp;}public void setATimestamp(Date timestamp) {

aTimestamp = timestamp;}...

Page 26: P2C2 Introducción a JEE5

Usa

ndo

Tem

pora

l Met

adat

a @Enumerated(EnumType.ORDINAL)public ColorType getColorId() {

return colorId;}public void setColorId(ColorType colorId) {

this.colorId = colorId;}@Enumerated(EnumType.STRING)public ColorType getColorName() {

return colorName;}public void setColorName(ColorType colorName) {

this.colorName = colorName;} @Idpublic long getId() {

return id;}private void setId(long id) {

this.id = id;}

//final of class}

Page 27: P2C2 Introducción a JEE5

Maneja el mapeo de O/R de las entidades a la base de datos.

Provee API’s- Insertando objetos en la base de datos- Obteniendo objetos de la base de datos- Sincronizando objetos con la base de datos- Consultando de la base de datos

Provee acceso en caché

Se coordina con servicios transaccionales del servidor (JTA)

javax.persistence.EntityManager

Page 28: P2C2 Introducción a JEE5

Es un juego de instancias de entidades administradas por un Entity Manager

Todas las entidades se vuelven “detached” una vez que han sido cerradas o eliminadas

Existen 2 tipos- Contextos de Persistencia de alcance-transaccional

>> inicio/fin en los limites de la transacción- Contextos de Persistencia extendidos

>> vive mas que una transacción simple>> permite interacciones más duraderas con la base de datos

CONTEXTO DE PERSISTENCIA

Page 29: P2C2 Introducción a JEE5

Ejem

plo

de C

onte

xto

de

Pers

iste

ncia

Alcance

transaccional

(dentro de un

servidor)

•@PersistenceContext(unitName=”jpaDemo”)

•private EntityManager em;

•public void update(long authorId, String type) {•Author author =

em.find(Author.class, authorId);

•author.setType(type);

•em.merge(author);

•}

Extendido (dentro o fuera de un

servidor)

•EntityManager em = Persistence.

•createEntityManagerFactory(“jpaDemo”).createEntityManager();

•tx.begin(); //tx 1 begins•Author author =

em.find(Author.class, authorId);•tx.commit(); //tx 1 ends, but

author remains managed•...•tx.begin(); //tx 2 begins•author.setType(type);•tx.commit(); //tx 2 ends, and

author is still managed until close

Page 30: P2C2 Introducción a JEE5

Es un juego de clases que están mapeadas a la base de datos

Definido en META-INF/persistence.xml

Debe tener un identificador (name=“”)

Las Clases - Pueden ser nombradas en el archivo “persistence.xml”- Pueden ser automáticamente escaneadas del proyecto

UNIDAD DE PERSISTENCIA

Page 31: P2C2 Introducción a JEE5

Son componentes que permiten interactuar con la base de datos y que residen en el servidor.

A través del entity manager estos componentes pueden realizar operaciones de actualización sobre la base de datos.

Debe tenerse en cuenta el tipo de transacción que está usando el contexto de presistencia para asegurar la coherencia de los datos.

BEANS DE SESIÓN

Page 32: P2C2 Introducción a JEE5

pers

ist(

)

Ejemplo

•Author author = new Author();

•author.setFirstName("dr");

•author.setLastName("seuss");

•author.setSubject("children");

•author.setPublishDate(new Date());

•em.persist(author);

Contextos de persistencia

extendidos

•Encola la escritura hasta ser asociado con una transacción

Contextos de persistencia

de alcanc

e-transaccional

•Imposible de llamar fuera de un servidor

Page 33: P2C2 Introducción a JEE5

find(

)

Ejemplo

•Author author2 = null;•author2 =

em.find(Author.class, id);

•log.info("got author author:" + author2);

•got author author:id=51, fn=thing, ln=one, subject=children, pdate=Fri Sep 15 11:54:15 EDT 2006

Definiciones

•Retorna una instancia de la clase asociada con el valor de la llave primaria especificada.•Las relaciones son

instanciadas de acuerdo a las políticas de carga de enlaces (Fetch).

•Retorna nulo si la llave primaria no se ha encontrado.

•Usa genéricos, de tal modo que no necesita casting.

•Será “atached” al contexto de persistencia abierto.•ejecutar find() por

segunda vez, retornará el mismo objeto

Page 34: P2C2 Introducción a JEE5

getR

efer

ence

()

Ejemplo

•Author author2=null;•author2 =

em.getReference(Author.class, id);

•log_.info("got author author:" + author2);

Similar a

find()

•Retorna una instancia de la clase asociada con el valor de la llave primaria especificada.•No garantiza que

el estado del objeto se haya inicializado.

•Lanza EntityNotFoundException si la llave primaria no se ha encontrado.

Page 35: P2C2 Introducción a JEE5

crea

teQ

uery

()

5 métodos

•Todos devuelven una instancia de java.persistence.Query•Query

createQuery(String ejbqlString);

•Query createNamedQuery(String name);

•Query createNativeQuery(String sqlString);

•Query createNativeQuery(String sqlString, Class resultClass);

•Query createNativeQuery(String sqlString, String resultSetMap);

Ejemplo

•Query query = em.createQuery("from jpaAuthor where id=" + id);

•Author author = (Author) query.getSingleResult();

Definicion

es

•Usa EJB-QL y consultas con lenguaje nativo.

•Similar a find()/getReference().•Retorna

objetos “atached” a un contexto de persistencia abierto.

Page 36: P2C2 Introducción a JEE5

mer

ge()

Ejemplo

•public Author updateByMerge(Author author) {

• Author managedAuthor = em.merge(author);

• return managedAuthor;

•}

Definicion

es

•Unifica los cambios de estado de la entidad en el almacén de persistencia.

•El original permanece “detached”.

•El objeto retornado (editado) es administrado.

Page 37: P2C2 Introducción a JEE5

rem

ove(

)

Ejemplo

•public void remove(Author author) {

• em.remove(author);

•}

Definicion

es

•Elimina objetos de la base de datos•Físicamente

ejecutado en la base de datos de acuerdo con la política flush

•Ejecución en cascada a objetos relacionado de acuerdo a la política cascade

•El objeto se vuelve “detached”

Page 38: P2C2 Introducción a JEE5

refr

esh(

) y c

onta

ins(

) Ejemplo

•Author author = em.find(Author.class, id);

•em.refresh(author);

•if (em.contains(author)) {•...

•}

Definiciones

•Usado para asegurar que la entidad esté sincronizada con la base de datos.

•Ejecución en cascada a objetos relacionados dependiendo de la política cascade.

•La entidad debe estar actualmente administrada por el entity manager.

•Usado para verificar que la instancia de la entidad esté siendo administrada por el entity manager.

Page 39: P2C2 Introducción a JEE5

clea

r() y

flus

h()

clear()

•Desconecta todas las entidad, volviéndolas detached.

•No confirma los cambios encolados.•Debe llamarse

a flush() antes de clear().

flush()

•Cambios no se sincronizan con la base de datos hasta que el entity manager ejecute flush().•persist(), merge(),

remove().•Ocurre automáticamente

antes de ejecutar.•Consultas relacionadas.•Confirmar una

transacción (commit).•FlushMode

•AUTO – por defecto y lo más saludable.

•COMMIT – una optimización para sincronizar y finalizar una transacción manualmente.

Page 40: P2C2 Introducción a JEE5

Son componentes que actúan como proxies aplicando las reglas del negocio al delegar las tareas a los beans de sesión correspondientes.

Es necesario realizar una serie de pasos para garantizar una conexión segura entre este componente y los beans de sesión.

DELEGADOS

Page 41: P2C2 Introducción a JEE5

Paso 1

Crear una clase con un nombre que cumpla con la siguiente nomenclatura:

“NombreEntidad”+Delegate

Crear una propiedad del tipo de bean de sesión que nos permita trabajar con la entidad correspondiente.

Page 42: P2C2 Introducción a JEE5

Paso 2

Hacer clic derecho sobre cualquier parte de la clase y seleccionar la opción “Insert Code…”.

De preferencia, hacerlo dentro del cuerpo de la clase.

Page 43: P2C2 Introducción a JEE5

Paso 3

En el menú emergente que aparece, seleccionar la opción “Call Enterprise Bean”.

Page 44: P2C2 Introducción a JEE5

Paso 4

Aparecerá una ventana como la siguiente, en la cual buscaremos el bean de sesión con el cual queremos que nuestro Delegado tenga conexión.

Luego de eso, sin modificar el campo “Reference Name”, hacemos clic en “OK”.

Page 45: P2C2 Introducción a JEE5

Paso 5

Luego de cumplir el paso 4, automáticamente aparecerá este segmento de código.

La función de este método es crear una conexión limpia entre el delegado y el servidor para obtener una instancia del bean de sesión.

Es importante que este método se genere cumpliendo estos pasos. Sin embargo, esta tarea sólo se realiza una vez por proyecto web. Sí y solo si ya se ha generado por primera vez, se puede copiar de una clase a otra.

Page 46: P2C2 Introducción a JEE5

Paso 6

Ahora debemos crear un constructor que no reciba parámetros, pero que en el cuerpo se inicialice la variable “local” haciendo un llamado al método que se generó en el paso anterior. Tal como su muestra en la siguiente imagen.

Es imprescindible que se realice este paso, ya que de no hacerlo la variable “local” siempre será null.

Page 47: P2C2 Introducción a JEE5

Paso 7

El paso 5 tiene repercusión en el archivo web.xml. Como sabemos, este archivo describe los parámetros de despliegue y la configuración de la aplicación en el servidor.

Por tal motivo, en la pestaña “Referencias” encontraremos nuestra referencia hacia el bean de sesión seleccionado.

Page 48: P2C2 Introducción a JEE5

Paso 8

Podemos revisar el archivo web.xml en formato XML para darnos cuenta que los valores coinciden con nuestro método lookupPersonaFacade().

Page 49: P2C2 Introducción a JEE5

Paso 9Sólo para demostrar un ejemplo de lo que puede hacer un Delegado, crearemos un método público crear que reciba como un parámetro a una persona.

Este método es susceptible a lanzar excepciones cuando hay un error en la comunicación con la base de datos o cuando incumple la regla: “DNI es único por persona”.

Nótese que toda interacción con la base de datos el método delega la tarea al bean de sesión correspondiente.

Page 50: P2C2 Introducción a JEE5

3 Resumen

Page 51: P2C2 Introducción a JEE5

» 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 sólo ha tocado 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 52: P2C2 Introducción a JEE5

GRACIAS

Page 53: P2C2 Introducción a JEE5

O también puedes encontrarla

en .

Saludos!

AULA VIRTUALEncuentra esta presentación en el