880 likes | 1.14k Views
Curso avanzado de Fundeweb. Índice de contenidos. Ciclo de vida JSF Immediate ="true" Procesamiento parcial Regiones ajax Propiedad process CMIS y Apache Chemistry Birt - Informes Intalio y Fundeweb Genética Patrones de diseño J2EE Fundeweb 2.0. JSF (Java Server Faces).
E N D
Índice de contenidos • Ciclo de vida JSF • Immediate="true" • Procesamiento parcial • Regiones ajax • Propiedad process • CMIS y Apache Chemistry • Birt - Informes • Intalio y Fundeweb • Genética • Patrones de diseño J2EE • Fundeweb 2.0
JSF (Java Server Faces) • Ciclo de vida JSF: • Reconstrucción del árbol de procesamiento con los datos introducidos por el usuario. • Aplicación de los valores reconstruidos en el servidor. • Procesamiento de eventos. • Validación de valores introducidos. • Actualización del modelo. • Invocar aplicación (calcular respuesta, redirección, etc…). • Renderizado de la respuesta al cliente.
JSF (Java Server Faces) Aplicación de los valores reconstruidos en el servidor. • Reconstrucción del árbol de procesamiento con los datos introducidos por el usuario. • Procesamiento de eventos • Validación de valores introducidos. Invocar aplicación Actualización del modelo. Renderizado de la respuesta
JSF (Java Server Faces) • Reconstrucción del árbol de procesamiento • Tras un submit se restaura el árbol de contenido. • El controlador examina el contenido y crea los componentes que se requieran por el contenido recibido. • El controlador examina el contenido recibido para saber si es una nueva vista o está en una ya creada de antemano. • El controlador almacena los ID de las vistas que ha recibido para saber qué objetos debe inicializar y cuales recargar.
JSF (Java Server Faces) • Aplicación de los valores reconstruidos en el servidor • Cada componente creado en el paso anterior obtiene su valor de la petición recibida en el paso anterior. • Los valores recibidos se convierten a los esperados por sus respectivos componentes. • Si algún valor no puede convertirse se envía un error de conversión en esta fase. • Si un componente es marcado como inmediato, se asigna el valor y se pasa a la etapa de validación antes de tratar el resto de componentes. • Si hay algún evento enconlado hasta el momento, JSF lo reenvía en esta fase.
JSF (Java Server Faces) • Procesamiento de eventos. • En este punto han podido lanzarse errores de conversión de tipos o de validación en caso de valores inmediatos. • Estos eventos se capturan y se le indican al controlador. • El controlador redirigirá el flujo hacia un estado seguro devolviendo un evento de error en caso de proceder.
JSF (Java Server Faces) • Validación de valores introducidos. • Se procede a comprobar si los valores introducidos cumplen las restricciones definidas en la aplicación. • Estos eventos se capturan y se le indican al controlador. • El controlador redirigirá el flujo hacia un estado seguro devolviendo un evento de error en caso de proceder. • Se ejecutarán los validadores estándar y los definidos por el usuario en el código fuente. • En caso de no cumplirse alguna restricción se lanzará un evento de error y se redirigirá el flujo.
JSF (Java Server Faces) • Actualización del modelo. • Una vez validados los datos se procede a actualizar el modelo. • Se copian los datos en las clases Java que los contienen pasando la información a la parte de control de la aplicación. • En este punto los valores copiados son válidos desde el punto de vista de la corrección, aunque pueden ser inválidos para la lógica de negocio.
JSF (Java Server Faces) • Invocar aplicación. • Con los valores introducidos procedemos a invocar a la lógica de negocio de la aplicación. • Tras procesar los datos pasaremos a generar una respuesta o bien a un estado de error. • En este punto se persistirán los datos, calculará la redirección, se harán las llamadas a servicios externos, etc…
JSF (Java Server Faces) • Renderizado de la respuesta al cliente. • Se genera la página de respuesta al cliente en base al resultado obtenido en la fase anterior. • Se tratará el árbol de respuesta para mostrar los elementos que así sean necesarios como sus valores. • En caso de haberse producido un error deberá notificarse al cliente en esta redirección.
JSF (Java Server Faces) • Immediate = true • Confundido con la funcionalidad que permite ajax usando "ajaxSingle = true". • Adelanta la fase de validación sólo a los campos con immediate=true. • En caso de funcionar correctamente valida el resto de componentes y los envía. • Como vemos, en cualquier caso, si todo funciona correctamente se envían todos los valores.
JSF (Java Server Faces) • Immediate = true • ¿Qué diferencia hay con ajaxSingle? • Immediate true manda siempre todos los valores. • ajaxSingle sólo manda el/los valores indicados para que se envíen por lo que el resto de valores no actualizarán el modelo. • En general en Fundeweb se aconseja usar ajaxSingle frente a immediate ya que el uso en la mayoría de casos es para evitar la validaciones de determinados campos, que con immediate no se evita.
Índice de contenidos • Ciclo de vida JSF • Immediate="true" • Procesamiento parcial • Regiones ajax • Propiedad process • CMIS y Apache Chemistry • Birt - Informes • Intalio y Fundeweb • Genética • Patrones de diseño J2EE • Fundeweb 2.0
Regiones ajax • Las regiones ajax nos permiten englobar una parte del código para que se envíe en el submit. • Nos aporta flexibilidad a la hora de valorar qué componentes queremos que se actualicen en el modelo. • Es importante que los elementos que hacen submit dentro de una región ajax sean de tipo ajax. • Un error común es incorporar un h:commandButton dentro de una región ajax. El resultado no será el espardo pues h:commanButton hará submit de todo el formulario ignorando la región.
Regiones ajax • Ejemplo de código: • <h:inputText id="input1" value="#{….}" /> • <a:region> • <h:inputText id="input2" value="#{….}" /> • <h:inputText id="input3" value="#{….}" /> • <a4j:commandButton id="ajaxBut" value="Submit ajax" /> • </a:region> • <h:commandButton id="jsfBut" value="Submit" /> • Si pulsaramos el botón ajax sólo se enviarían "input2" e "input3" • Pulsando el botón JSF se envían todos los input.
Propiedad Process • Esta propiedad se utiliza en componentes con la propiedad ajaxSingle. • Modifica el comportamiento para, en el submitajax, no solo envía el dato marcado con ajaxSingle, sino todos los componentes que se encuentren en dicha etiqueta. • <h:inputTextvalue="#{….}"id="texto1"> <a:supportajaxSingle="true" process="email" event="onblur" /> </h:inputText> <h:inputTextareavalue="#{….}"id="desc" /> <h:inputTextvalue="#{….}"id="email"> <a:supportajaxSingle="true" process="name" event="onblur" reRender="someOut"/> </h:inputText> • En este caso se enviaría en el evento oblur los input "texto1" e "email".
Índice de contenidos • Ciclo de vida JSF • Immediate="true" • Procesamiento parcial • Regiones ajax • Propiedad process • CMIS y Apache Chemistry • Birt - Informes • Intalio y Fundeweb • Genética • Patrones de diseño J2EE • Fundeweb 2.0
CMIS (Content Management Interoperability Services) • Actualmente existen diferentes sistemas para la gestión documental • Alfresco • dotCMS • eXo Platform • EMC Documentum • El principal problema: API's de acceso no unificadas. • CMIS: Estándar de comunicación con gestores documentales.
CMIS (Content Management Interoperability Services) • CMIS unifica la gestión de los contenidos en un punto de acceso común a diferentes gestores documentales. • Establece dos canales de comunicación: • SOAP • REST (Atom Pub) • Permite al programador abstraerse de la implementación concreta bajo los servicios que se exponen. • Admite extensiones para peculiaridades de los gestores documentales. • Ej: Aspectos en Alfresco.
Apache Chemistry • Provee una implementación del estándar CMIS • Facilita aún más al programador la interacción con el gestor documental. • Abstrae de los detalles del protocolo de comunicación concreto utilizado (Soap, REST) • Amplia la abstracción de las extensiones que soportan el protocolo de comunicación y las integra con la API propia.
Apache Chemistry • Ejemplo de uso
Índice de contenidos • Ciclo de vida JSF • Immediate="true" • Procesamiento parcial • Regiones ajax • Propiedad process • CMIS y Apache Chemistry • Birt - Informes • Intalio y Fundeweb • Genética • Patrones de diseño J2EE • Fundeweb 2.0
Birt • Generador de informes basado en eclipse. • Compuesto por dos componentes principales: • Editor de Informes. • Generador de Informes (BirtUM) • Pretende abarcar el mayor rango de componentes disponibles a la hora de realizar un informe. • Centrado en permitir diseñar fácilmente informes de manera gráfica. • Objetivo: Descargar a los desarrolladores del trabajo de plasmar en un informe las especificaciones detalladas del cliente.
Birt: Editor de informes • Herramienta integrada dentro del IDE Eclipse • Estructura enfocada al diseño de informes de manera visual. • Provee diferentes maneras de acceder a los datos: • Directamente sobre BBDD. • A través de csv o XML. • Vía WebServices. • … • Define una manera clara de filtrar los datos que queremos tratar en un momento determinado.
Birt: Editor de informes • DataSources • Un DataSource es la propia fuente de datos. • Definimos su tipo y su manera de conectar. • Nos permite acceder a la información que necesita el informe. • DataSet • Es un subconjunto de los datos que provee el DataSource. • Sobre ellos podemos realizar operaciones en el informe. • Podemos definir tantos DataSet's como subconjuntos queramos.
Birt: Editor de informes • DataSet • Permite crear datos adicionales. • Permite calcular valores en base a los datos incluidos en el.
Birt: Editor de informes • Parámetros: • Birt permite que se definan parámetros de entrada en el informe. • Estos parámetros pueden tener varias funciones: • Configurar aspectos generales del informe. • Proveer el propio origen de los datos en los que se basará el DataSource (por ejemplo en informes a partir de XML). • Los parámetros son recogidos por el motor de informes y se procesan antes de la generación del mismo.
Birt: Editor de informes Árbol de orígenes de datos Editor de informes Propiedades de los elementos Árbol de elementos
Birt: Editor de informes • Árbol de orígenes de datos: • Contiene todos los componentes que aportan datos para generar el informe: • DataSource: Origen real de los datos. • DataSet: Agrupación de datos. • DataCubes: Agrupación cruzada de datos. • Parámetros del informe: Parámetros de entrada del informe. • Variables: Variables que se usarán durante la generación del informe. • A partir de los componentes dados de alta en esta vista, se podrán rellenar las estructuras de datos del informe.
Birt: Editor de informes • Editor de informes • Vista encargada de permitirnos diseñar el informe. • Permite el diseño visual o directamente sobre código. • Pose una vista "Master Page" para definir la estructura general de todas las páginas. • Permite introducir scripts a ejecutar según determinados eventos. • Permite editar visualmente el informe. • Permite visualizar una vista previa del resultado, siempre que sea posible.
Birt: Editor de informes • Árbol de elementos • Añade a la información del árbol de orígenes de datos la estructura del informe. • Muestra de una manera clara y ordenada cómo se "pintan" los componentes del informe. • Establece las dependencias entre elementos. • Nos permite visualizar los scripts o librerías añadidas al informe.
Birt: Editor de informes • Propiedades de los elementos • Esta vista permite ajustar parámetros de cada uno de los elementos del informe. • Nos permite asignar componentes gráficos a orígenes de datos. • Permite realizar filtrados • Permite establecer condiciones sobre los componentes. • Ej: Decidir si se pinta o no dependiendo de un valor. • Permite modificar el aspecto de los componentes. • Cada componente, además de la configuración general, añade su configuración propia.
BirtUM • Componente de ATICA para la generación de informes Birt. • Expone dos interfaces: • Informes BBDD • Informes XML • Ambas soportan paso de parámetros al servidor. • Los informes BBDD devuelven el informe de dos maneras: • URL • Array bytes. • Los informes XML sólo devuelven el informe como Array de bytes.
BirtUM • La generación de informes XML puede devolver dos posibles resultados: • PDF • XLS (multi hoja) • Permite depurar fácilmente con SoapUI la generación de informes desde un cliente. • Importante configurar timeouts adecuados para los test.
Ejercicio Birt • Haciendo uso del editor de informetBirtrealizar el diseño de un informe acorde la plantilla proporcionada. • Usar el fichero xml proporcionado como entrada de datos. • Diseñar con Birt el informe. • Previsualizar el informe en PDF.
Ejercicio Birt • Pasos a seguir: • Crear un proyecto Birt y un fichero de informes vacío. • Definir la fuente de datos (fichero XML). • Modificar el "master page" para definir encabezado y pie de página. • Crear DataSet que agrupe todos los libros con su conteido. • Crear una tabla que muestre ese DataSet. • Crear un DataSet que contenga el precio de los libros y dos columnas calculadas: • Libros con precio superiro a 10€ • Libros con precio inferior a 10€ • Ojo: Hacer uso de propiedades calculadas y filtrado.
Ejercicio Birt • Pasos a seguir: • Crear Grid para contener el texto necesario. • Insertar gráfico de barras y definir condiciones para que cuente los libros que hay por autor. • Probar que el informe se imprime correctamente.
Índice de contenidos • Ciclo de vida JSF • Immediate="true" • Procesamiento parcial • Regiones ajax • Propiedad process • CMIS y Apache Chemistry • Birt - Informes • Intalio y Fundeweb • Genética • Patrones de diseño J2EE • Fundeweb 2.0
Intalio y Fundeweb • Intalio es un framework de desarro de procesos de negocio. • Permite programar de manera ágil flujos de proceso. • Nos habilita para modelar el comportamiento de un negocio concreto. • Flujo documental: creación, validación, firma, archiado. • Flujos industriales: recogida material, fabricación, envasado, empaquetado, distribución. • Flujos administrativos: creación solicitud, revisión de responsable, validación por supervisión, aprobación. • Etc …
Intalio y Fundeweb • Basado en la notación BPMN para modelar procesos de negocio. • Provee un entorno para desarrollar, compilar y ejecutar nuestros propios procesos.
Intalio y Fundeweb • A grandes rasgos BPMN:
Intalio y Fundeweb • ¿Qué nos permite Intalio? • Definir y gestionar: • Roles de ejecución. • Variables. • Interacción entre tareas. • Errores o situaciones no permitidas • Notificaciones. • Conectarse con entidades externas: • Bases de datos. • Servicios Web.
Intalio y Fundeweb • Intalio provee una api para la interactuar con él desde una aplicación externa. • Permite ligar aplicaciones existentes con el flujo de un determinado proceso. • Soporta intercambio de datos vía XML. • Permite aplicar los mecanismos de autenticación y autorización. • Permite la personalización detallada del Front-End de la aplicación.
Intalio y Fundeweb • ¿Cómo interactúa con Fundeweb? • La API de Intalio permite: • Enviar y recibir información externa través de XML. • Gestionar los procesos. • Autentica al usuario que se pretende contectar. • Componente de seguridad: • Permite la gestión de roles y permisos (autorización). • Carga en Intalio el perfil del usuario que intenta ejecutar una determinada acción.
Intalio y Fundeweb • Flujo de comunicación
Índice de contenidos • Ciclo de vida JSF • Immediate="true" • Procesamiento parcial • Regiones ajax • Propiedad process • CMIS y Apache Chemistry • Birt - Informes • Intalio y Fundeweb • Genética • Patrones de diseño J2EE • Fundeweb 2.0
Genética • Es un generador automatizado de PAO's para Fundeweb. • Genera las clases y estructuras Java necesarias para realizar llamadas a procedimientos. • Actúa sobre la base de datos ORACLE. • Basa su funcionamiento en el archivo de especificación de ORACLE. (spec.sql). • Analiza dicho fichero y devuelve como resultado la estructura Java que se ajusta a lo indicado.
Genética: Configuración • Configuración de spec.sql • Mediante este fichero indicamos los procedimientos a los que vamos a llamar. • Genética lo usa de base para generar la infraestructura Java equivalente.
Genética: Configuración • Configuración del Datasource • Debemos indicarle a genética dónde se encuentra la base de datos sobre la cual queremos actuar. • Para ello lo indicamos en el fichero: • spec-parser.properties • Una vez indicado, Genética incluirá dicha especificación en los EJB generados en cargados de la ejecución de lo indicado en el fichero spec.sql.