Tabla de Contenidos

Arquitectura de las aplicaciones Fundeweb 2.0

PEDRO DELGADO YARZA 2014/02/11 18:11

Las aplicaciones Fundeweb están soportadas por cinco pilares básicos: Primefaces 6.x, JSF 2.1, Seam 2.3, Hibernate 4.2 , Metro 2.3. Estas tecnologías fijan la pila de servicios básica para las diferentes aplicaciones que podemos desarrollar.

Flujo de ejecución de una aplicación web.

Partiendo desde el punto de vista de un usuario común, la aplicación web es sólo un conjunto de pantallas que hacen “cosas”, pero no sabemos ni dónde ni qué “cosas”, por lo que debemos saber en qué puntos actúa cada tecnología para que podamos mejorar y optimizar nuestro código en cada momento.

Partiendo desde la misma base, desde el punto de vista informático, tenemos un formulario con una serie de elementos html sobre los que podemos actuar, ¿qué ocurre si realizamos una acción sobre alguno de ellos?

  1. Primefaces: Actúa ejecutando las acciones javascript asociadas al componente accionado. Dichas acciones pueden ser desde efectos visuales hasta validación de datos.
  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.

Tras este proceso, podemos comprobar cómo toda la pila tecnológica de Fundeweb actúa tras cada petición, en este caso un submit, para ejecutar la interacción requerida por el usuario a la aplicación. A continuación introducimos más en detalle estos elementos y sus características principales.

Primefaces

Primefaces

Es una librería que trabaja sobre JSF la cual proporciona un conjunto de componentes enriquecidos que mejoran y facilitan la creación de la capa de la vista en aplicaciones web. La principal característica de Primefaces es que está orientado a la eficiencia a la hora de gestionar los diferentes componentes de la vista, esto se traduce en cargas más rápidas, menos memoria en uso y finalmente menos esperas para los usuarios en la interacción con la aplicación.

Los puntos más relevantes son:

Primefaces, situado en la parte superior de la pila tecnológica de Fundeweb 2.0, nos provee, por tanto, de los componentes necesarios para desarrollar de manera eficiente nuestra página web, introduciendo las menores dependencias posibles y con componentes cuidados visualmente.

JSF

Java Server Faces

JavaServer Faces (JSF) es un framework para aplicaciones web Java que gestiona la interacción entre el servidor y la capa de la vista. JSF nos permite dibujar en el navegador la vista de los formularios que queremos mostrar y recoger los datos y acciones realizadas por el usuario para procesarlas en el servidor.

Dentro de las acciones que realiza JSF se encuentran:

JSF implementa un ciclo de vida para renderizar y gestionar todos los componentes de la vista, así como, validar los datos y enviarlos al servidor. En el siguiente esquema se detalla dicho ciclo de vida:

El resumen del funcionamiento de estas fases es el siguiente:

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

Seam

Seam 2.x Framework

Seam es un framework de desarrollo web desarrollado por JBoss que orquesta la interacción de JSF con el servidor y la capa de la vista. Seam hace de intermediario proporcionando una serie de facilidades que nos permiten generar un código más limpio y ligado.

Seam combina dos tecnologías existentes EJB y JSF cambiando la capa artificial existente para combinarlos por un conjunto consistente y coherente de anotaciones que suplen a la perfección las funcionalidades de interacción necesarias entre ambos.

Seam almacena los datos de los formularios en entity beans y los eventos los maneja con session beans. Creando aplicaciones y que requieren significativamente menos código (en Java y en XML) para obtener las mismas funcionalidades.

A su vez introduce el concepto de Inyección-Outyección, también conocido como Biyección, lo que permite que los diversos componentes creados puedan ser “importados” en otros componentes con el uso de una simple anotación. De la misma manera, vincula esos componentes con la capa de la vista permitiendo que los datos introducidos por el usuario se mapeen directamente sobre las clases Java correspondientes.

Otro factor importante es que amplia es espectro de ámbitos de aplicación, introduciendo los contextos Page y Conversation, los cuales nos permiten optimizar en gran medida los recursos que estamos utilizando en cada momento.

Para poder proporcionar biyección, validacion, etc…, Seam tiene que interceptar las invocaciones a los componentes. Para los JavaBeans, Seam tiene el control completo del componente, y no se necesita configuración adicional. Para los beans de entidad, la intercepción no es necesaria ya que no pueden utilizar la biyección y la demarcación de contextos. Para los beans de sesión, debemos registrar un interceptor de EJBs para el bean de sesión a través del cual Seam podrá actuar para localizar y servir los componentes que se requieran en cada caso.

Hibernate

Hibernate

Hibernate es una herramienta para la plataforma Java que facilita el mapeo de atributos entre una base de datos relacional y el modelo de objetos de una aplicación, mediante archivos declarativos (XML) o anotaciones, que permiten establecer estas relaciones.

Incluye un lenguaje de consultas llamado Hibernate Query Language (HQL) que permite diseñar nuestras consultas de base de datos como si fueran clases orientadas a objetos. Tiene una sintaxis a medio camino entre SQL y Java, lo que facilita al programador realizar consultas sin necesidad de conocer todos los detalles de una tabla, usando simplemente el objeto Java asociado a la misma.

Hibernate permite abstraernos de las capas inferiores a él por lo que no nos tenemos que preocupar si se cambia de base de datos en el sistema, sólo tendremos que cambiar determinados parámetros de configuración para especificar el driver y el dialecto a utilizar con la nueva base de datos.

Por lo tanto Hibernate es una potente librería que nos abstrae de la gestión a bajo nivel de la base de datos, permitiéndonos trabajar con clases Java durante el ciclo de vida de los objetos (POJO) para terminar persistiéndolos.

Metro

Metro es una pila de servicios web, parte del proyecto GlassFish, pero que puede usarse como un conjunto de librerías independientes. Está basado en las implementaciones de referencia y, entre otros, incluye los componentes JAXB y JAX-WS que nos proporcionarán al capacidad de montar nuestros propios servicios web.

Esta pila de servicios nos permite realizar: