Documente Academic
Documente Profesional
Documente Cultură
Session Beans
EJBs
Son componentes servidor que:
Implementan la lgica de negocio de la aplicacin Facilitan el desarrollo de aplicaciones distribuidas, transaccionales, seguras, escalables, ...
Tema 2 JPA - 3
Session Beans
Representan las acciones, el cmo. Un SB proporciona servicios como clculos, reglas de negocio, acceso a BD, etc. para un cliente. Los hay de dos tipos:
Stateless Stateful
Tema 2 JPA - 4
Tipos
Stateless
Operaciones simples, autocontenidas. No requieren mantener el estado conversacional. Instancias equivalentes y compartibles. Pool de instancias.
Stateful
Operaciones que se expanden en mltiples peticiones. Requieren mantener el estado conversacional. Cada bean sirve a un nico usuario y no puede ser compartido.
Tema 2 JPA - 5
Message-driven Beans
Tambin representan acciones. Permite a los clientes acceder a servicios de negocio asncronos. Un MDB est permanentemente escuchando la llegada de un mensaje dirigido a l. Cuando llega un mensaje, se ejecuta la lgica de negocio asociada al MDB.
Tema 2 JPA - 6
Entity Beans
Representan las cosas, el qu. Un EB es un objeto persistente que representa datos mantenidos en un almacn de datos.
Tema 2 JPA - 7
Tema 2 JPA - 8
Tema 2 JPA - 9
Inyeccin de dependencias
Nuevo mecanismo de EJB 3.0 que facilita el uso de EJB's en los clientes. Ejemplo servlet:
public class MiServlet extends HttpServlet { @EJB(name=HolaServiceLocal) public HolaServiceLocal servicio; public void doGet(...) { ... String saludo = servicio.saludar(); ... } }
Es inicializado automticamente por el contenedor
Tema 2 JPA - 10
Impedance mismatch
Algunos objetos de nuestra aplicacin necesitan persistencia. Normalmente utilizamos bases de datos relacionales Alguien se tiene que para ello.
Asignatura
-codigo:int -nombre:String -creditos:int
1..*
Curso
-numero:int
AsignaturaTroncal
AsignaturaOptativa
1..*
Itinerario
-descripcion:String
Modelo OO
Tema 2 JPA - 12
Red
DTO getAtributo1() ... getAtributoN()
Tema 2 JPA - 13
Pueden transferirse por la red normalmente a un cliente, modificarse en ste, reenviarse al servidor y resincronizarse con la BD (desaparece la necesidad de DTO)
Tema 2 JPA - 14
Un ejemplo
@Entity public class Asignatura { private Long codigo; private String nombre; private int creditos; private Curso curso; @Id public Long getCodigo() { return codigo; } public void setCodigo(Long codigo) { this.codigo = codigo; } ...
Tema 2 JPA - 16
Un ejemplo (cont.)
// getters y setters para las propiedades nombre y creditos @ManyToOne public Curso getCurso() { return curso; } public void setCurso(Curso curso) { this.curso = curso; } }
Tema 2 JPA - 17
Contexto de persistencia
Una instancia de una entidad en todo momento puede estar:
Gestionada (managed/attached): est asociada a un EntityManager que hace un seguimiento de los cambios que se producen en la instancia y los sincroniza con la BD No gestionada (unmanaged/dettached)
Contexto de persistencia: el conjunto de entidades gestionadas en un momento dado por un EntityManager
No gestionadas EntityManager
Tema 2 JPA - 18
Contexto de persistencia
Hay varios tipos de contextos de persistencia. Uno de ellos es el de alcance transaccin.
Se crea al inicio de una transaccin Cuando finaliza la transaccin se cierra, y todas las instancias que gestionaba se convierten en dettached
Tema 2 JPA - 19
Servicios de EntityManager
persist()
Primero creamos nuestras instancias Inicializamos sus propiedades y relaciones Invocamos el servicio persist()
public void crearAsignatura(String codigo, String nombre, int creditos) { Asignatura asig = new Asignatura(); asig.setCodigo(codigo); asig.setNombre(nombre); asig.setCreditos(creditos); entityManager.persist(asig); }
Servicios de EntityManager
find()
Nos permite localizar la instancia de una entidad por su clave primaria. Si no la encuentra, devuelve null
public void cambiarNumCreditos(String codigo, int numCreditos) { Asignatura asig = entityManager.find(Asignatura.class, codigo); asig.setCreditos(numCreditos); }
La instancia devuelta ser managed o no segn se invoque dentro o fuera de una transaccin
Tema 2 JPA - 21
Servicios de EntityManager
remove()
Programa la eliminacin de una instancia de la base de datos Hemos de pasarle una instancia que sea managed
public void eliminarAsignatura(String codigo) { Asignatura asig = entityManager.find(Asignatura.class, codigo); entityManager.remove(asig); }
Tema 2 JPA - 22
Servicios de EntityManager
merge()
Una instancia puede ser dettached, enviada a un cliente, modificada por ste y vuelta a enviar al servidor para ser resincronizada con la BD
public Asignatura getAsignatura(String codigo) { return entityManager.find(Asignatura.class, codigo); } public void actualizarAsignatura(Asignatura asig) { Asignatura copia = entityManager.merge(asig); } Tema 2 JPA - 23
Servicios de EntityManager
EntityManager es tambin una factora de objetos Query
public Collection<Asignatura> getAsignaturasCurso(int curso) { String ejbql = from Asignatura a where curso.numero = :curso; Query query = entityManager.createQuery(ejbql); query.setParameter(curso, curso); return query.getResultList(); }
Tema 2 JPA - 24
flush() y FlushModeType
Cuando invocamos persist(), remove() y merge(), estos cambios no son sincronizados con la BD hasta que el EntityManager lo decide. Ello depende del modo FlushModeType:
AUTO: los cambios son sincronizados antes de una query y antes del commit (es el valor por defecto) COMMIT: los cambios son sincronizados slo antes del commit
Unidad de persistencia
Es un conjunto de entidades (clases anotadas con @Entity) mapeadas a una misma base de datos Se define en un fichero persistence.xml
<?xml version="1.0" encoding="UTF-8" ?> <persistence> <persistence-unit name=cursos"> <jta-data-source>java:/Cursos</jta-data-source> <properties> <property name="hibernate.hbm2ddl.auto" value="create-drop /> </properties> </persistence-unit> </persistence>
Tema 2 JPA - 26
Obtener un EntityManager
Hay varias formas. En la ms sencilla, utilizamos el mecanismo de inyeccin de dependencias.
@Stateless public class ServicioCursosBean implements ServicioCursos { @PersistenceContext(unitName=cursos) EntityManager em; // ... }
Tema 2 JPA - 27
Existen mappings por defecto pero tambin podemos controlar casi cualquier aspecto del modelo fsico
Tema 2 JPA - 28
Relaciones
Podemos mapear relaciones unidireccionales o bidireccionales, singledvalued o multi-valued. Relaciones
OneToOne OneToMany ManyToOne ManyToMany Empleado Empleado Empleado Empleado
1 1..* 1..* 1..* 1..* 0..1 1
0..*
Tema 2 JPA - 29
Relaciones - Ejemplo
@Entity public class Asignatura { private Curso curso; @ManyToOne @JoinColumn (name=CURSO) public Curso getCurso() {...} // . . . } }
ASIGNATURA PK CODIGO NOMBRE CREDS FK CURSO CURSO PK NUMERO
@Entity public class Curso { private Collection<Asignatura> asignaturas; @Id public Integer getNumero() {...} @OneToMany(mappedBy=curso) public Collection<Asignatura> getAsignaturas() {...} // . . .
Tema 2 JPA - 30
fetch
Podemos especificar que una cierta informacin no se recupere de la BD cuando se recupere la entidad con el tipo de fetch (EAGER o LAZY) Por defecto los atributos y las relaciones single-valued tienen tipo de fetch EAGER y las relaciones multi-valued LAZY
@Entity public class Empleado { private DatosBancarios db; @OneToOne (fetch=FetchType.LAZY) public DatosBancarios getDatosBancarios() {...} // . . . }
Tema 2 JPA - 31
Relaciones y cascada
La cascada se usa para propagar el efecto de una operacin sobre una entidad a las entidades relacionadas. Puede ser:
PERSIST REMOVE MERGE REFRESH ALL
} @Entity public class Empleado { private Direccion direccion; @ManyToOne (cascade=CascadeType.PERSIST) public Direccion getDireccion() {...} // . . .
Tema 2 JPA - 32
Herencia
El API de persistencia soporta la herencia entre entidades Existen tres estrategias bsicas para el mapeo de la herencia:
Single table Table per concrete class Joined Strategy
Tema 2 JPA - 33
Herencia - Ejemplo
@Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) public abstract class Asignatura { }
ASIGNATURA_TRONCAL
@Entity public abstract class AsignaturaTroncal { } @Entity public abstract class AsignaturaOptativa { }
PK
Tema 2 JPA - 34