Introducción

Fundeweb es un Framework de desarrollo basado en tecnologías J2EE y desarrollado mediante el IDE eclipse. El grupo de Metodologías, Normalización y Calidad del Software (MNCS) desarrolla, mantiene, da soporte y evoluciona dicho framework. A su vez define una serie de normativas para el correcto desarrollo y facilitar la coordinación de equipos de trabajo y cambios de proyecto.

Existen dos versiones del Framework: Fundeweb 1 y Fundeweb 2, siendo ésta última sobre la cual se desarrollan los nuevos proyectos, la versión 1 se mantiene para dar soporte a proyectos antiguos que aún no se han podido actualizar a la pila tecnológica de Fundeweb. Junto con la instalación del entorno se incluyen una serie de librerías de utilidades gestionadas por MNCS y un arquetipo para la creación de nuevos proyectos.

Un arquetipo es la semilla de todo proyecto Fundeweb, el cual nos proporcionará la estructura de nuestro el proyecto junto con todas las librerías necesarias para su desarrollo. Una vez creado un proyecto sólo tendremos que configurar unos pocos aspectos, como la base de datos a utilizar o si quiero o no incorporar autenticación para empezar a trabajar. Este arquetipo incluye por defecto:


Arquitectura

La arquitectura se basa en la pila tecnológica J2EE añadiendo otras librerías de terceros que enriquecen las posibilidades del Framework de cara a facilitar los desarrollos y mantener lo más actualizado posible todo el ecosistema que se utiliza.

Partiendo desde el punto de vista de un usuario común, la aplicación web es sólo un conjunto de pantallas que hacen una determinada tarea, pero no sabe todo lo que sucede sin que se dé cuenta desde que hace click con el ratón hasta que obtiene el resultado. Nuestra labor es conocer en qué puntos entran en acción cada tecnología de la pila del Framework para que podamos mejorar y optimizar nuestro código en cada momento, previniendo a su vez problemas de seguridad.

En la imagen anterior está enumerado el orden del flujo que se realiza desde el click del usuario hasta la obtención de la respuesta:

  1. Primefaces: Actúa ejecutando las acciones javascript asociadas al componente accionado. Dichas acciones pueden ser desde efectos visuales hasta validación de datos, también lanza el submit del formulario en el que nos encontramos o una llamada AJAX.

  2. JSF: Examina el árbol DOM y la acción realizada y comienza la ejecución de su ciclo de vida en caso de detectarse un “Submit”, bien sea del formulario entero, bien sea parcial (AJAX).

  3. Seam: Intercepta y gestiona los eventos y contenidos enviados por JSF para dotar a la lógica de la aplicación de los elementos necesarios para gestionar y controlar la acción realizada por el usuario. (Se ejecutará la lógica de la aplicación).

  4. Hibernate: Será el encargado final de persistir, actualizar o eliminar los datos que así lo necesiten de base de datos.

  5. Seam: Decide, tras ejecutar la lógica de negocio, hacia dónde debe navegar la aplicación.

  6. JSF: Finaliza la ejecución de su ciclo de vida preparando y renderizando la página destino a la que se ha navegado.

  7. Primefaces: Dibuja los componentes y ejecuta las acciones javascript pertinentes.

Este ejemplo es muy resumido pero debemos entender en qué punto interviene cada tecnología para poder localizar errores y saber depurar correctamente la aplicación. Cabe destacar que también debemos conocer el ciclo de vida de JSF ya que es el orquestador de todo el proceso apoyándose principalmente en Seam.

JSF

El ciclo de vida de JSF es lo que marca qué ocurre desde que el usuario hace click hasta que se devuelve una respuesta. El resto de tecnologías se incorporan a este ciclo de vida enriqueciendo algunas de las etapas, pero el flujo siempre lo marcará JSF

En el dibujo anterior podemos seguir lo que ocurre internamente y los posibles flujos que puede recorrer el proceso hasta que se le da la respuesta al usuario final.

  1. Fase 1: Reconstrucción del árbol de procesamiento

    Fase 2: Aplicación de los valores reconstruidos en el servidor

    Fase 3: Procesamiento de eventos

    Fase 4: Validación de valores introducidos

    Fase 5: Actualización del modelo

    Fase 6: Invocar aplicación

    Fase 7: Renderizado de la respuesta al cliente