• No se han encontrado resultados

9. DESARROLLO DEL PROYECTO

9.6 HERRAMIENTAS TECNOLÓGICAS PARA EL DESARROLLO DEL PROYECTO

9.6.2 Software utilizado en el desarrollo

9.6.2.1.1 Java (JDK 1.8.0_101)

Tecnología elegida para el proyecto por ser un lenguaje multiplataforma, disponer de una gran cantidad de recursos y documentación, brindar seguridad, portabilidad, robustez, independencia de la arquitectura, soporte de multihilos, dinamismo y especialmente, proveer de especificaciones a los programas, haciéndoles fáciles de entender y ser extensibles [93].

En la implementación del proyecto, a fin de probar la portabilidad y obtener más eficiencia por parte de los desarrolladores, se migró temporalmente el código al sistema operativo Ubuntu 14.04.2, en el que, a nivel de Java, no se obtuvo diferencia alguna. Además, al inicio del desarrollo, se consideró utilizar un modelo de persistencia relacional con el que se conocía la tecnología de conexión para Java, sin embargo a posterioridad el modelo orientado a documentos se consideró como mejor alternativa (en cuanto a formatos) y Java no fue un impedimento para incorporarlo.

105

9.6.2.1.1.1 Java Server Faces (JSF 2.2)

Es una especificación que define un framework web para la creación de aplicaciones [94]. Es un estándar Java hacia la construcción de interfaces de usuario para aplicaciones web que simplifican el desarrollo del lado del cliente con base en la arquitectura MVC (Modelo Vista Controlador). Esta versión brinda mejoras en la navegación, control de excepciones, mejoras en la expresión del lenguaje y validación de beans [95].

Esta tecnología posee una arquitectura similar a cualquier otra tecnología Java basada en una aplicación web (ilustración 29), obteniendo un servlet que contiene componentes JavaBeans, etiquetas personalizables y clases auxiliares. JSF provee mecanismos de renderizado individual de componentes, permitiendo gestionar la presentación sin importar el mecanismo utilizado para representarla [94].

La arquitectura específica del software de TSP posee ligeras diferencias con la arquitectura base de JSF mostrada en la ilustración 28, ya que se separó la capa Modelo en capa Web y capa

Controlador, con la finalidad de separar la gestión de los componentes web de la gestión de datos.

Además, como se describió anteriormente, los datos están depositados en dos servidores independientes.

106

9.6.2.1.1.1.1 Managed Bean

Es una clase regular Java Bean gestionada por el framework JSF [94], y por tanto, conserva las características básicas de cualquier aplicación Java, a excepción de los comparadores sobre el ambiente web.

Esta tecnología provee diversas funcionalidades, aunque muy útiles, muy difíciles de leer para el equipo, y por tanto, de interpretar. Por esta razón se produjeron las siguientes funciones reutilizables.

mostrarPagina(String nombrePagina). Una función que resume el llamado del redirect del

ExternalContext que proviene del CurrentInstance que a su vez depende del FacesContext.

El objetivo es facilitar la muestra de una página web de JSF de modo que al leer el llamado, se interprete fácilmente que se quiere cargar la página solicitada para el usuario.

getManagedBean(String clase). Con el fin de facilitar la comunicación entre los beans de

JSF, sin hacer una compleja llamada, se crea esta función capaz de devolver el bean a partir de su nombre. Resume el llamado del evaluateExpressionGet del Application, del

FacesContext, haciendo más fácil de interpretar y unificando el llamado.

unir(String cadena). Para facilitar la indización, la función une (remueve espacios) y ajusta

una cadena soportada por las páginas JSF.

actualizar(). Una función sin contenido, sin embargo, dado el modo de ejecución de JSF,

permite hacer el mapeo de los datos diligenciados por los usuarios a las variables del servidor.

hacerPositivo(AtributoCompuesto atributo). Gran parte de las validaciones de la

metodología, se centran en garantizar que los valores son positivos, de modo que esta función es reutilizada constantemente, independizando el dato recolectado.

formatearDate(Date fecha). Para presentar las fechas registradas en el sistema, a los

usuarios, se brinda una función capaz de mapear la fecha y presentarla en formato

dd/MM/yyyy.

cadenaIncompleta(String cadena, int numCaracteres). Brinda una subcadena en un total

de caracteres igualmente especificado como parámetro para los casos en que, la cadena pueda ser o muy corta o muy extensa, y de ese modo, no afectar la experiencia del usuario.

107

getMensajeSeleccion(). Función que brinda el texto “Seleccione…” en cada selector del

sistema a modo de unificar esta información independientemente del contexto.

9.6.2.1.1.1.2 Converters

Los convertidores permiten mapear componentes web con las listas de objetos. Esto fue útil en la implementación para proveer al usuario de la lista de selección de proyectos a los que pertenece.

9.6.2.1.1.2 PrimeFaces (6.0)

Es una librería de componentes visuales de código abierto para JSF, desarrollada y mantenida por Prime Techology, con el objetivo principal de ofrecer un conjunto de componentes para facilitar la creación y diseño de aplicaciones web [95]. Aunque una de sus principales características es su kit para la creación de aplicaciones web móviles, la razón por la que se ha elegido esta tecnología, es su uso flexible de JavaScript y proveer herramientas para la gestión de archivos y graficado.

Para sacar mayor provecho y comprensión del uso de lenguaje JavaScript que provee PrimeFaces, se definió la función sobrecargada ejecutarJS. Esta función se encarga de ejecutar funciones JavaScript recibiendo el nombre de éstas como parámetro o tanto el nombre como los parámetros alojados en un arreglo.

9.6.2.1.1.3 Commons codec (1.10)

Es una librería apache que permite encriptar la información que viaja a través de internet con ayuda del algoritmo MD5, el cual es muy seguro y casi imposible de descifrar, todo esto con una simple línea de código [98]. Esta tecnología en particular permitió encriptar la contraseña del usuario para asegurar sus datos personales.

9.6.2.1.1.4 Commons FileUpload (1.3.1)

Esta librería provee un framework avanzado para el manejo de archivos de tal forma que permite leerlo mientras está en memoria [99]. Esta librería ha sido utilizada para permitir a los usuarios gestionar los documentos del directorio del proyecto.

9.6.2.1.1.5 Gson (2.3.1)

Gson o también conocida como Google JSON, es una librería para trabajar con JSON para facilitar el serializado y deserializado de objetos Java, lo que es más cómodo y fácil de trabajar

108

[100]. Particularmente se ha utilizado esta tecnología para la gestión de formatos y algunos objetos auxiliares que, gracias al proceso de serialización y deserialización, se pudieron clonar sin esfuerzos significativos.

9.6.2.1.1.6 Hibernate (4.3.x)

Es una herramienta ORM completa y considerada como el producto OpenSource líder en este campo, gracias a sus prestaciones, buena documentación y estabilidad. Corresponde a la capa de persistencia objeto/relacional y es un generador de sentencias SQL. Permite diseñar objetos persistentes que podrán incluir polimorfismo, relaciones, colecciones y un gran número de tipos de datos [101].

Hibernate ha sido utilizado para poder mapear los objetos correspondientes a las tablas de la base de datos relacional, donde se gestiona principalmente el proyecto, los usuarios y los roles. Esta tecnología permitió ejecutar las transacciones sin necesidad de utilizar procedimientos almacenados y asegurando la integridad de los datos.

9.6.2.1.1.7 Mongo Java Driver (3.2.2)

Proporciona integración sincrónica y asincrónica con MongoDB que se alimenta de una biblioteca BSON independiente que utiliza codificadores de alto rendimiento y decodificadores sin requerir una instancia de mapa intermedia [102]. Esta herramienta brinda soporte a la conexión con el motor de base de datos MongoDB para gestionar la persistencia de los formatos TSP.

9.6.2.1.1.8 Jongo (1.3.0)

Es una librería capaz de mapear objetos Java para ser almacenados en el motor MongoDB y a la vez es capaz de brindar módulos que pueden ejecutar sentencias nativas del motor sin un esfuerzo significativo [103]. Con esta tecnología fue posible mapear y ejecutar transacciones relacionadas con el objeto Formato en colaboración con la interfaz definida para la capa de datos,

DataSource.

9.6.2.1.1.9 Xmlbeans (2.6.0)

Es una tecnología para el acceso a XML mediante Java, que proporciona un sistema que genera, a partir de XML, una hoja de cálculo [104]. Gracias a la utilización de esta herramienta, es posible exportar los datos recolectados en los formatos a partir de un llenado fila a fila del documento resultante.

109

9.6.2.1.2 Front-End

9.6.2.1.2.1 PrimeFaces: Bootstrap (1.0.10)

Es la tecnología que soporta PrimeFaces para modificar el denominado skin de la aplicación, es decir, la apariencia. En este caso, los componentes web adquieren una apariencia semejante a la tecnología Front-End, Bootstrap.

9.6.2.1.2.2 Materialize (0.97.7)

Framework para el desarrollo web con estilo Material Design. Desarrollado en SASS y que hace uso de las buenas prácticas en HTML5, CSS3 y JavaScript [107]. Se ha elegido esta tecnología para el desarrollo del proyecto debido a que brinda un diseño responsivo realista, con sombras, animaciones y colores que simulan la cotidianidad y por lo tanto, brinda una experiencia significativa al usuario.

9.6.2.1.2.3 Páginas JSF

En JSF, los componentes web están contenidos en documentos XHTML, que combina las características XML con HTML [94]. La vista es tratada en forma diferente debido a que la programación de la interfaz se hace a través de componentes y está basada en eventos, lo que además hace de esta tecnología muy flexible y capaz de separar claramente la presentación del comportamiento [97].

9.6.2.1.2.3.1 Subvistas

Debido a que la interfaz de usuario es típicamente el aspecto más volátil de una aplicación web durante su desarrollo, JSF brinda herramientas capaces de crear una interfaz flexible y amigable que brinda una distribución enfocada en la organización típica de una página web: cabecera, menú y contenido [97].

Con base en las subvistas proporcionadas por JSF, se construyó un módulo capaz de brindar en todo momento, la gestión de la sesión y de los proyectos para el usuario, de modo que el componente construido fue reutilizado en cada vista de la sesión.

9.6.2.1.2.3.2 Inclusión

Puesto que JSF permite crear componentes propios, se creó la tecnología propia del proyecto denominada tsp; una tecnología capaz de resumir, personalizar y por ende agilizar el

110

desarrollo en el contenido XHTML incluyendo a Materialize para brindar contenidos específicos que aportan una significativa experiencia al usuario.

Las variables de componentes de la tecnología tsp se describen a continuación, a fin de comprender el contexto por cual son agregados en un contenido específico XHTML.

carg. Componente que despliega el mensaje de Cargando, con una animación basada en

Materialize, al recibir una solicitud del cliente. Requiere de la variable objeto para indicar

el elemento XHTML a bloquear hasta obtener una respuesta del servidor, y de la variable

elemento para asignar un índice para este componente a fin de llamarlo desde el evento de

la solicitud.

text. Representa un textarea normalmente utilizado en una página web, con características

provenientes de Materialize. Requiere de la variable id que representa el identificador del componente, de la variable tipo para indicar el tipo de dato a almacenar, de la variable valor

para asociar un elemento Java, de la variable max para controlar el número de caracteres máximo permitido, de la variable texto para indicar lo que se desea que el usuario diligencie, de la variable deshabilitado en caso de que se desee que el componente no pueda ser modificado por el usuario, de la variable i para indicar el ícono asociado al campo de texto y de la variable m para indicar el tamaño del componente en término medio para la característica responsiva de Materialize.

modalConfirm. Consiste en un modal, de Materialize, para solicitar al usuario la

confirmación de las transacciones. Requiere de la variable id para identificar el componente, de la variable texto para describir exactamente la transacción a ejecutar y de la variable validacion para indicar el verdadero elemento para efectuar la solicitud, de modo que el validador sepa a qué botón o enlace, por ejemplo, acudir una vez el usuario confirma la operación.

entrada. Representa un input normalmente utilizado en una página web, con características

provenientes de Materialize. Requiere de las mismas variables que el componente text

excepto por la variable max.

msg. Componente para generalizar las características de la información de respuesta del

servidor a una solicitud del usuario. Su única variable es boton para apuntar al componente XHTML capacitado para el envío de datos del cliente al servidor.

111

select. Componente para representar un selector de XHTML con las características de

Materialize. Requiere de la variable m para definir el tamaño responsivo, de la variable i

para asociar un ícono, de la variable lista para indicar la lista alojada en el Bean, de la variablepara representar el iterador de la lista, de la variable itemValor para indicar lo que cada ítem del selector va a mapear como elección, de la variable itemLabel para indicar lo que cada ítem del selector va a mostrar al usuario y de la variablepara indicar la variable que va a recibir los datos de acuerdo a la elección del usuario.

Con estos componentes a disposición del equipo de desarrollo, la creación de formularios se hizo una tarea más sencilla y más fácil de leer, pues sintetiza el código, proporciona características puntuales y brinda elementos compuestos a un costo mínimo.