Está en la página 1de 4

MEMORIA DE LA PRCTICA DE NEGOCIO Y PERSISTENCIA ACCESO A BEANS CDI DESDE JSF

Juan Jos Fernndez Prez

Defino la clase Mensaje con la anotacin de dependencia @Named que sirve para asociar un nombre al bean. El nombre asignado se utiliza para acceder al objeto a travs de una referencia EL. En este caso la referencia ser el nombre de la clase con la primera letra minscula, as que desde la pgina Bienvenido.xhtml se hace referencia a #{mensaje.mensajeBienvenida()} para mostrar el mensaje de bienvenida y desde Despedida.xhtml se hace referencia a #{mensaje.mensajeDespedida()} para mostrar el mensaje de despedida.

CREACIN DEL EJB SIN ESTADO EJBFichaje Creo el EJB de sesin sin estado de la siguiente forma: @Stateless public class EJBFichaje Todo bean de sesin sin estado es necesario que disponga de una interface, como he definido directamente el bean sin la creacin de la interface, el propio contenedor la crea como interface Local. Dentro de este EJB se usa la anotacin @PersistenceContext para inyectar un entitymanager en el bean de sesin sin estado. El contenedor de EJB nos proporciona el contexto de persistencia mediante inyeccin por lo que no tendremos que preocuparnos de su creacin y destruccin. Adems EJBFichaje dispone de tres mtodos: Fichar que recibe un objeto de tipo Fichaje conteniendo el usuario y la fecha y hora a la que se ficha, y persiste estos datos en la base de datos usando la operacin EntityManager.persist. buscarPorFechas que tiene como argumentos una fecha inicial y una fecha final para los que se hace la bsqueda (objetos de tipo Date) y devuelve una lista de objetos de tipo Fichaje. Esta lista representa un conjunto de pares usuario y momento en el que fich (entre la fecha inicial y la fecha final), ordenados segn el momento en el que fich. Esta bsqueda se hace usando la operacin EntityManager.createNamedQuery para ejecutar la consulta dinmica "Practica.buscarPorUsuario". buscarPorUsuario que recibe un objeto de tipo String (el nombre del usuario para el que se hace la bsqueda ) y devuelve una lista de objetos de tipo Fichaje. Esta lista representa un conjunto de pares usuario y momento en el que fich para ese usuario ordenados segn el momento en el que fich. Esta bsqueda se hace usando la operacin EntityManager.createNamedQuery para ejecutar la consulta dinmica "Practica.buscarPorFechas".

MEMORIA DE LA PRCTICA DE NEGOCIO Y PERSISTENCIA

Juan Jos Fernndez Prez

SIGUIENTE NIVEL DE ABSTRACCIN, LA CLASE FICHAJESERVICE La interfaz FichajeServiceInterface es implementada por las dos clases FichajeService (Mock y Real) y tienen los mismos mtodos: La clase FichajeService con funcionalidad REAL inyecta EJBFichaje a travs de la anotacin @EJB private EJBFichaje ejbfichaje, y tiene los siguientes mtodos: Fichar llama al mtodo ejb.fichaje para que persista el objeto fichaje en la base de datos. buscarPorFechas que llama al mtodo ejb.buscarPorFechas para obtener una lista de objetos Fichaje (entre la fecha inicial y la fecha final), ordenados segn el momento en el que fich. Una vez que tiene la lista calcula el tipo de fichaje (ENTRADA o SALIDA) para cada elemento de la misma. buscarPorUsuario que llama al mtodo ejb.buscarPorFechas para obtener una lista de objetos Fichaje, ordenados segn el momento en el que fich. Una vez que tiene la lista calcula el tipo de fichaje (ENTRADA o SALIDA) para cada elemento de la misma.

La clase FichajeService con funcionalidad MOCK tiene los siguientes mtodos: Fichar que no hace nada. buscarPorFechas y buscarPorUsuario que devuelven una lista de objetos Fichaje constantes y ficticios, simulando as el resultado de una posible bsqueda.

Las anotaciones @real y @Mock se definen en Real.java y en Mock.java respectivamente.

SIGUIENTE NIVEL DE ABSTRACCIN, MbeanBuscador y MbeanPrincipal El managed bean MbeanBuscador inyecta las clases Fichajeservice REAL y MOCK (o bien una o la otra) usando las anotaciones : import uned.JuanJoseFernandez.fichaje.negocio.interfaces.Real; @Inject @Real FichajeService buscador; y import uned.JuanJoseFernandez.fichaje.negocio.interfaces.Mock; @Inject @Mock FichajeService buscador; MbeanBuscador dispone entre otros de los mtodos:

MEMORIA DE LA PRCTICA DE NEGOCIO Y PERSISTENCIA

Juan Jos Fernndez Prez

BuscarPorUsuario: Llama al mtodo buscarPorUsuario de FichajeService para obtener una lista de objetos Fichaje, ordenados segn el momento de fichaje y la transforma en una lista de objetos FichajeDetalle, que es la estructura de datos que maneja la pantalla Resultados.xhtml para mostrar los datos en pantalla. BuscarPorFechas: Llama al mtodo buscarPorFechas de FichajeService para obtener una lista de objetos Fichaje, ordenados segn el momento de fichaje y la transforma en una lista de objetos FichajeDetalle, que es la estructura de datos que maneja la pantalla Resultados.xhtml para mostrar los datos en pantalla.

El managed bean MbeanPrincipal inyecta las clases Fichajeservice REAL y MOCK (o bien una o la otra) usando las anotaciones : import uned.JuanJoseFernandez.fichaje.negocio.interfaces.Real; @Inject @Real FichajeService servicio; y import uned.JuanJoseFernandez.fichaje.negocio.interfaces.Mock; @Inject @Mock FichajeService servicio; MbeanPrincipal dispone del mtodo fichar que llama al mtodo fichar de FichajeService para registrar el fichaje en la base de datos.

BASE DE DATOS Y ENTIDAD JPA En la base de datos se guarda para cada fichaje un registro con tres campos: Un ID de tipo BIGINT que va a ser la clave primaria del registro. Un campo TIEMPO de tipo TIMESTAMP que va a almacenar la fecha y la hora del fichaje. Un campo LOGIN de tipo VARCHAR que va a almacenar el nombre del usuario que ficha.

No se almacena informacin sobre el tipo de fichaje (entrada o salida) puesto que se puede generar a travs de la lgica de negocio. La clase Fichaje la anoto con @Entity dado que va a ser el bean de entidad de la aplicacin que asocio a la tabla FICHAJE. As el campo id, usuario y momento de la clase Fichaje los hago corresponder con los campos ID, TIEMPO y LOGIN de la base de datos. Y el campo tipo lo marco con la anotacin @Transient dado que tiene correspondencia con ningn campo de la base de datos puesto que no se persiste.

MEMORIA DE LA PRCTICA DE NEGOCIO Y PERSISTENCIA

Juan Jos Fernndez Prez

En la pestaa servicios de netbeans creo la base de datos Prctica pulsando el botn derecho del ratn sobre JAVA DB Para que se cree en la carpeta Server Resources el fichero glassfish-resources.xml con la definicin del pool de conexiones del Datasource que usar la aplicacin sigo los pasos siguientes:

En netbeans creo un pool de conexiones en el men File New File Glassfish JDBC Conection Pool. Con el nombre Practica_Pool y a partir de la conexin jdbc:derby://localhost:1527/Practica, le indico que el usuario y la contrasea son APP y que la tabla se llama FICHAJE Despus creo un nuevo recurso JDBC en el men File New File Glassfish JDBC Resource . Usando el pool de conexiones existente de nombre Practica_Pool y con el nombre JNDI jdbc/Practica .

Una unidad de persistencia define el conjunto de entidades y su configuracin de mapeo que asociada al origen de datos. Las unidades de persistencia se definen en un archivo con nombre persistence.xml. Para generar la nuestra en el men File New File Persistence Persistence Unit .
PersistenceUnit name: PracticaPU Persistence Provider: EclipseLink Datasource: jdbc/Practica Marco: Use Java Transaction API y Table generation strategy=Create