Objetivos
Desarrollar el nivel de presentación de una aplicación empresarial utilizando el framework JavaServer Faces (JSF). Esto incluye:
- Experimentar el uso de una implementación de un framework basado en el patrón de IoC (Inversion of Control). En este tipo de frameworks se define un modelo de componentes y por medio de metadata se configura el acceso a recursos (e.g., bases de datos), los atributos de calidad (e.g., navegabilidad, seguridad) y otros servicios (e.g., persistencia). El framework que utilizamos es JEE. En particular en este taller exploramos el modelo de componentes Web provisto por la plataforma JSF, que hace parte de JEE.
- Aprender a utilizar una herramienta de desarrollo para aplicaciones basadas en JSF.
- Utilizar el patrón MVC junto con un framework de componentes para el desarrollo de interfaces gráficas para aplicaciones empresariales.
- Desarrollar Managed Beans, que juegan el rol de modelo en el patrón MVC, para manejar los datos y la navegación de una aplicación JSF (Nota: Estos modelos están acoplados con la vista por lo menos a nivel de navegación).
Utilizar Mock objects para facilitar las pruebas e integración de componentes.
Herramientas
- Para el desarrollo de todos los talleres del curso se utilizará Netbeans 8.0.2, el cual se puede descargar de la siguiente dirección: https://netbeans.org/downloads/
- El servidor de aplicaciones a usar es GlassFish Server Open Source Edition 4.1 (Java EE 7), el cual se puede descargar de la siguiente dirección link.
- Tutorial de introducción a JSF 2.X con Netbeans
- Primefaces Demo
- Primefaces documentation
Caso de Estudio de Ejemplo
En esta primera parte el objetivo es familiarizarse con la tecnología JSF y los requerimientos para desarrollar la capa web de una aplicación JEE. En segundo lugar se desarrollará la capa web para todos los requerimientos de Muebles de los Alpes.
- Para familiarizarse con las actividades necesarias para crear una aplicación con interfaz web debe seguir y completar antes de este taller el tutorial de JSF 2.x que se encuentra en el siguiente enlace Introduction to JavaServer Faces 2.x
- Si usted ya está familiarizado con la plataforma JEE y ya conoce los principios básicos de la plataforma JSF, el siguiente paso consiste en descargar el código, que presenta el esqueleto de un programa desarrollado para cumplir con los requerimientos del proyecto “Muebles los Alpes”, el cual será utilizado con dos propósitos: (1) servirá de introducción para reafirmar los conceptos de JSF vistos en clase; (2) servirá como ejemplo para la elaboración de la segunda parte de este laboratorio.
- Inspeccione el código descargado:
- La aplicación es una aplicación empresarial. En JEE estas aplicaciones tienen generalmente dos partes. La primera parte corresponde a un modulo “war” que contiene los componentes de la aplicación WEB, que son ejecutados por el contenedor Web. La segunda parte es un modulo “ejb” que contiene los componentes que implementan la lógica de negocio y que son ejecutados en el contenedor de EJB. Esta arquitectura permite gran flexibilidad, por ejemplo, permite desplegar la interface gráfica y la lógica de aplicaciones en máquinas distintas.
- Al abrir el proyecto usted encuentra tres carpetas dentro del mismo:
- La carpeta Configuration Files que almacena el MANIFEST.MF.
- La carpeta Server Resources que se encuentra vacía.
- La carpeta Java EE Modules que contiene los módulos EJB y WAR del proyecto. Necesita abrir ambos módulos haciendo doble clic sobre los mismos. El módulo MueblesDeLosAlpes-war es el que contiene las páginas, los Managed Beans y los archivos de configuración (faces-config.xml y web.xml) de la interfaz web. El módulo de MueblesDeLosAlpes-ejb contiene los mocks de lógica de negocio y persistencia, las excepciones y las pruebas unitarias.
- El archivo web.xml, que se encuentra en la ruta Web Pages/WEB-INF/, es el archivo descriptor de despliegue, es decir, contiene toda la información que necesita el contenedor para hacer el despliegue de la aplicación web. Esta información contiene la descripción de los servlets, inicialización de parámetros, frameworks a utilizar, entre otras cosas. Más información en Configurando la aplicación.
- JSF es un framework de componentes basado en el patrón MVC. En este framework el controlador es implementado por el servlet principal de JSF (FacesServlet), la vista es implementada por las páginas, y el modelo es implementado por los Managed Beans.
- El controlador está incluido en la plataforma JSF y lo único que debemos asegurar es que la aplicación esté bien configurada.
- Las vistas se implementan en páginas “xhtml” usando las librerías de tags básicos HTML y core de JSF.
- Los modelos se implementan con managed-beans, que son POJOS enriquecidos con metadata.
- Existen cuatro tipos de alcance (scope) para los managed-beans:
- Request: Es un bean de vida corta. Es decir, se crea cuando se instancia un HTTP Request y dura únicamente durante el tiempo que sea necesario para resolver dicho HTTP Request.
- Session: Este bean persiste a lo largo de toda la sesión. Una sesión termina por decisión del contenedor (por medio de un time-out configurable) o manualmente (opción para el desarrollador).
- Application: Los beans con este alcance persisten durante el tiempo que persiste la aplicación en el contenedor.
- View: Persiste mientras una página es re-desplegada. Es particularmente útil para páginas que usan AJAX.
- Existen tres formas de crear managed-beans:
- Manualmente con anotaciones (recomendada): Para esto se debe agregar una nueva clase en el proyecto que represente al bean. La clase entonces puede ser anotada con el siguiente código:
@ManagedBean @SessionScoped public class Hello {...}
o también dando un nombre específico:
@ManagedBean(name="hello") @SessionScoped public class Hello {...}
- Manualmente por medio del archivo faces-config.xml: Para esto se debe agregar una nueva clase en el proyecto que represente al bean. Posteriormente, debe modificarse el archivo faces-config.xml con la referencia al nuevo bean. Específicamente, debe insertarse el siguiente bloque de código:
<managed-bean> <managed-bean-name>NuevoBean</managed-bean-name> <managed-bean-class>com.losalpes.beans.NuevoBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>
- Mediante asistente de creación de NetBeans:
Se abre el asistente de creación mediante clic derecho sobre el proyecto WAR. Luego clic en New y selección de la opción Other. -
- El archivo project.xml ubicado en el proyecto WEB de la aplicación contiene la configuración de todas las librerías y proyectos referenciados desde el nivel WEB.
- Los paquetes dist de MueblesDeLosAlpes-war y MueblesDeLosAlpes-ejb contienen todos los archivos compilados que hacen parte del despliegue de la aplicación y los archivos XML que hacen la compilación mediante ANT.
- Manualmente con anotaciones (recomendada): Para esto se debe agregar una nueva clase en el proyecto que represente al bean. La clase entonces puede ser anotada con el siguiente código:
Desarrollo del laboratorio
Usted debe desarrollar los elementos necesarios para crear la capa de presentación para cumplir con los requerimientos expuestos en el enunciado, a partir del código. No se debe desarrollar la creación de muebles porque está definida como ejemplo en este taller. Sin embargo, es necesario en la consulta de clientes tener los filtros de búsqueda definidos en la especificación.
- Creación, actualización, consulta y eliminación de clientes.
- Proceso de compra de un producto a través de la página web.
- Generar reportes sobre las ventas diarias.
Para lograr esto, usted debe:
- Definir las páginas JSF requeridas en el proyecto.
- Definir los Managed Beans necesarios.
- Definir los mocks de los objetos de negocio para que su interfaz funcione (para el taller 3 serán reemplazados por EJB de session).
- La navegación quemada en el código de los managed-beans o de las páginas xhtml, presenta una seria desventaja para el mantenimiento de la aplicación. Sin embargo, si usted utiliza las cadenas como elementos de un esquema de nombres y utiliza el archivo de faces-config.xml puede crear un poderoso y flexible mecanismo de desacoplamiento. Modifique su aplicación para desacoplar la navegación en un archivo de configuración faces-config.xml. Puede ayudarse de la información contenida en este link.
Entregables
La entrega del laboratorio se debe hacer por Sicuaplus y consiste en un archivo .zip con la siguiente estructura de directorios interna:
- laboratorio2\Lab2-MueblesDeLosAlpes-ejb\ (completo)
- laboratorio2\Lab2-MueblesDeLosAlpes-war\ (completo)
Evaluación
La evaluación de este taller se hará de acuerdo con la siguiente plantilla de calificación.