cuyum / FormRender

HTML Form Render Application
0 stars 0 forks source link

Autor: Cuyum

Fecha: 30 de Agosto, 2013

FormRender

Aplicación web que permite on the fly leer un formulario definido en formato XML (xform) y transformarlo/renderizarlo en un HTML. Incluye la funcionalidad de upload de Formularios (XML) y también de archivos formato XSL que aplicará al realizar la transformación.

Índice

  1. Objetivos del documento
  2. Introducción
  3. Tecnología
  4. Arquitectura
  5. Compilación, Instalación y Ejecución

1. Objetivo del documento (Arriba)

Presentar una visión general de las características de la aplicación FormRender y sus aspectos técnicos de mayor relevancia, especificando las características técnicas y de arquitectura que tiene la plataforma, entre ellos los requerimientos de sistema necesarios para poder instalar y ejecutar la aplicación.

2. Introducción (Arriba)

La función principal de FormRender es poder generar formularios HTML a partir de una especificación basada en el estandar xForms. Los documentos xForms son documentos XML los cuales a través de una pantalla administrativa se cargan un con un identificador para luego ser recuperados e integrados a otras aplicaciones. FormRender internamente utiliza un procesador XSL para a través de un XSLT (Procesador de Transformación XSL) generar el código HTML correspondiente con sus correspondientes estilos CSS y funcionalidad JavaScript.


3. Tecnología (Arriba)

Es un sistema transaccional cuya interface a usuario es facilitada mediante el uso de tecnología web compatible con las últimas versiones de los Browsers de Internet (Internet Explorer, Firefox, Chrome). El uso de esta tecnología permitirá al sistema ser accesible desde cualquier lugar que cuente con conexión a Internet, podrá ser instalado y desplegado en servidores propios, externos o en “Clouds” lo que facilita la escalabilidad de la aplicación en caso de ser necesaria mayor carga de trabajo.

El sistema está construido utilizando plataforma y estándares de desarrollo JEE 6 (Java Enterprise Edition). Como implementación de este estándar se utiliza el stack tecnológico porvisto por JBoss 7.1.0 https://www.jboss.org/jbossas/ cuyas implementaciones principales son las siguientes:

1.1
Technología/Especificación JBoss 7.1
Java EE[JSR-151,244,316] 6.0
Java Servlet [JSR-154, 315] 3.0
JavaServer Faces (JSF) [JSR-252, 314] 2.0
JavaServer Pages & Expression Language (JSP) [JSR-245] 2.2
Java Transaction API (JTA) [JSR-907] 1.1
Enterprise JavaBeans with Interceptors 1.1 (EJB) [JSR-153, 220, 318] 3.1
Enterprise JavaBeans with Interceptors 1.1 (EJB) [JSR-153, 220, 318] 3.1
Java EE Connector Architecture [JSR-112, 322] 1.6
JavaMail [JSR-919 ] 1.4
Java Message Service (JMS) [JSR-914]
Java Persistence (JPA) [JSR-220, 317] 2.0
Java API for XML Web Services (JAX-WS) [JSR-224] 2.2
Common Annotations for the Java Platform [JSR-250] 1.1
Java API for RESTful Web Services (JAX-RS) [JSR-311] 1.1
Contexts and Dependency Injection for Java (CDI) [JSR-299] 1.0
Bean Validation [JSR-303] 1.0

Como tecnología de soporte para el mantenimiento de la información se utiliza base de datos relacional PostgreSQL


4. Arquitectura (Arriba)

Se pueden detallar 2 puntos de vista generales, la vista Lógica, que representa el stack de tecnologías utilizadas para desarrollar la plataforma, y la vista física, que representa la distribución física de los componentes

4.1. Vista Lógica (Arriba)

El siguiente diagrama representa una vista conceptual de la Arquitectura por capas de la aplicación, donde se puede ver para cada una de ellas la tecnología primaria utilizada para llevar a cabo la funcionalidad.

Web Servlet/JSF2
Servicios
CDI/POJO
JPA2 Transaccional Procesador XSLT Integración
JAX-WS/JAX-RS
Seguridad Conector
POJO

Capa Web (Arriba)

El objetivo de la capa web es proveer una interfaz de acceso al sistema para el usuario final. En esta capa se utiliza la implementación de JSF2 Primefaces para construir las interfaces a usuarios y Servlet para resolver la función principal del sistema que es devolver un formulario especificado en HTML.

Capa Servicios (Arriba)

Esta capa brinda un nivel de abstracción para acceso a la lógica de la aplicación, proveyendo así un conjunto de servicios uniformes y transparentes a los clientes mediante el uso CDI. Esta tecnología permite ofrecer POJOs como servicios y brinda facilidades de integración entre la capa de presentación, los servicios de negocio y los módulos restantes.

Capa Procesador XSLT (Arriba)

Representa el corazón de la aplicación, tiene la responsabilidad de transformar, leyendo de una base de formularios, la especificación de un formulario xForm en un HTML con sus estilos CSS y librerías JavaScript. Se está utilizando Saxon como engine XSLT para realizar la transformación.

Capa Seguridad (Arriba)

Esta capa brinda una interface para que la aplicación pueda resolver sus necesidades de autorización y autenticación. Existe una implementación default que resuelve estas cuestiones accediendo a un repositorio Redis.

Capa Transaccional (Arriba)

Su objetivo es brindar de una manera homogénea y transparente, mediante el uso del estándar de persistencia JPA2, el acceso a la información al resto de la aplicación independizándolo de la base de datos física con la que interactúa.

Capa Integración (Arriba)

Provee interfaces para acceder a datos externos a la aplicación que necesiten los formularios. Las implementaciones de estas interfaces se realizan mediante WebServices SOAP (JAX-WS) o Rest Services (JAX-RS)

4.2. Vista Física (Arriba)

Nodos Clientes (Arriba)

Los navegadores de Internet son el medio por el cual los usuarios interactúan con la aplicación. Ejemplo de ellos son Internet Explorer, Firefox y Google Chrome, deben tener soporte para AJAX. Se comunican a través del protocolo HTTP y renderizan las paginas HTML que visualizará el usuario.

Nodos Servidor

Este nodo, o mejor dicho instancias de este nodo, ya que se podría tener más de un Application Server brindando servicios esta, compuesto por instancias de JBoss 7 el cual contiene un EJB Container y un Mojarra embebido (Servlet Container) el cual brindaran los servicios de middleware (protocolos de comunicación entre componentes, control de transacciones locales y/o distribuidas, mecanismos de intercepción de eventos para control de seguridad y auditoria, manejos de excepciones y servicios de logging) al software a construir, el cual contiene diferentes módulos con responsabilidades bien definidas. Este servidor contendrá un Redis (motor de base de datos de memoria) para mantener información de contexto que el modulo de Seguridad utilizará para resolver sus servicios.

Nodos Data

Estos nodos contienen distintas fuentes de información con las que interactuará el sistema. Podemos distinguir dos tipos: Base de Datos: el sistema deberá interactuar con una base de datos PostgreSQL que servirá de información al modulo Transaccional, de Procesamiento y de Integración. Almacenamiento: utilizado por lo general para guardar imágenes, logs y archivos con información de operaciones.


5. Compilación, Instalación y Ejecución (Arriba)

En ésta sección se detalla todo lo necesario para compilar, instalar o deployar y ejecutar la plataforma. Se asume que los siguientes componentes, necesarios para dichas tareas, se encuentran instalados y corriendo normalmente en el sistema operativo.

5.1 Listado de componentes necesarios para poder ejecutar la aplicación:

5.2 Requisitos Mínimos:

Es necesario tener instalados (al menos) 2Gb de ram.

5.3 Instalación y Configuración de entorno (Arriba)

Agregar al archivo /standalone/configuration/standalone.xml

En la sección la siguiente entrada, especificando usuario y password correspondiente para habilitar el Data Source correctamente en Jboss:

    <datasources>

        <datasource jta="true" jndi-name="java:jboss/datasources/FormRenderDS" pool-name="FormRenderDS" enabled="true" use-java-context="true" use-ccm="true">
                    <connection-url>jdbc:postgresql://localhost:5432/formrender</connection-url>
                <driver-class>org.postgresql.Driver</driver-class>
                    <driver>postgresql</driver>
                <security>
                <user-name>${username}</user-name>
                        <password>${password}</password>
                </security>
        </datasource>  

        <drivers>    

            <driver name="postgresql" module="org.postgresql">
                <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
            </driver>

        </drivers>
    </datasources>
5.3.1 DataSource/DB

5.4 Descarga, Compilación y Ejecución (Arriba)

Esto genera un archivo war en "FormRender/target/FormRender.war"

La página de inicio muestra un listado de los formularios xml y html (columnas URL y XML respectivamente). Haciendo click en cada uno de ellos se pueden visualizar.