Comparativa JSF

RECU-0007 (Recurso Ficha)

Descripción

Siguiendo los objetivos de MADEJA de conocer los mejores recursos y herramientas, se ha realizado una comparativa de implementaciones JSF y librerías de controles de interfaz adicionales, considerando un conjunto de requisitos indispensables para el desarrollo ágil de una aplicación JEE.

Uso en MADEJA

Puede consultar un resumen mas detallado de las pruebas efectuadas para confeccionar esta comparativa siguiendo este enlace.

Resultados comparativa de implementaciones JSF

Los resultados del cumplimiento de los requisitos descritos anteriormente es el resultado de la investigación documental, programación, pruebas funcionales y de despliegue de las dos implementaciones de la especificación JSR-252 para JSF 1.2:

  • Mojarra de Sun Microsystems
  • MyFaces de Proyectos Apache.

Los resultados fueron los siguientes:

Resultados comparativa de librerías de controles adicionales

Así mismo se estudió el cumplimiento de los requisitos mediante investigación documental, programación, pruebas funcionales y de despliegue de las dos librerías de componentes de control de interfaz JSF más importantes por su robustez y extensibilidad:

  • RichFaces de JBoss
  • ICEFaces de ICESoft Technologies

Los resultados fueron los siguientes:

Consideraciones

La selección de estos componentes concretos se ha basado en estándares abiertos y de amplia difusión y en la experiencia en el desarrollo de aplicaciones y establecimiento de arquitectura JEE con esta tecnología como capa de presentación.

La columna Valor ponderado de las tablas de resultados mostradas anteriormente ha sido calculada conforme a la siguiente asignación de porcentajes de importancia de requisitos.

Conclusiones

Como se puede observar en los resultados las tecnologías con mejor puntuación en la comparativa son mojarra y richfaces.

Entre las implementaciones jsf estudiadas mojarra es la que más puntuación ha obtenido. Los puntos en los que mojarra destaca por encima de myfaces son la madurez, la portabilidad entre servidores y la integración con frameworks de negocio. En el caso de las librerías de componentes adicionales, es richfaces la que tiene mayor puntuación que ICEFaces, destacando como puntos fuertes la madurez, la portabilidad entre servidores, la integración con la capa de negocio y los validadores.

Criterios de la comparativa

En las siguientes tablas se muestran los criterios y la puntuación asignada por cada requisito.

Se asigna más valor (5) a aquella implementación o librería que cumpla mejor o en su totalidad el requisito descrito en cada apartado, los requisitos son los siguientes:

  • Navegadores
  • Servidores
  • Madurez
  • Pruebas
  • Productividad
  • Arquitectura
  • Portlets
  • Validaciones
  • Integración capa de Negocio
  • Controles UI

La documentación oficial de cada componente no indica alguna restricción explicita para los navegadores Chrome 3.0, Safari 4 y Opera 9.6, sin embargo la aplicación siempre debe comprobar la versión y el tipo de navegador del cual está recibiendo la petición.

Resultado ObtenidoComponente
4Mojarra
4MyFaces
3,43RichFaces
3,43ICEFaces
ValorDescripción
5Completamente compatible. No presenta ningún problema ni de JavaScript ni de CSS al mostrar los controles.
3Parcialmente compatible en algunas versiones de navegadores.
2Incompatibilidad por el objeto XMLHttpRequest y las diferentes versiones de JavaScript.

Servidores

En este apartado de servidores, se estudió un conjunto de requerimientos establecidos en el entorno tecnológico JSF para que las aplicaciones desarrolladas con Mojarra o MyFaces y con alguna de las dos librerías de controles evaluadas: RichFaces y MyFaces, sean portables.

Es decir que posean la capacidad de migrar de una plataforma hardware a otra sin que resulte problemático teniendo en cuenta los siguientes 3 puntos:

  • Parametrización de variables de configuración de sistema.
  • Parametrización de archivos propios de la aplicación JSF.
  • Garantizar compatibilidad con los diferentes servidores de aplicaciones a nivel librerías.
  • Utilización de estándares.
Resultado ObtenidoComponente
4,33Mojarra
3MyFaces
4,33RichFaces
4,67ICEFaces
ValorDescripción
5Las aplicaciones solo necesitan la configuración estándar para ser desplegadas en el servidor
3Las aplicaciones necesitan configuración adicional estándar para ser desplegadas en el servidor
1Las aplicaciones necesitan modificaciones manuales y complejas para ser desplegadas en el servidor.

Madurez

Análisis de algunos aspectos como hoja de ruta, versiones, comunidad y soporte que intentan explicar el crecimiento o ciclo de vida de las implementaciones y de las librerías de componentes adicionales.

El crecimiento y evolución de las librerías de componentes están inmersos en una dinámica innovadora, el proceso de nacimiento, crecimiento, madurez y declive son aspectos importantes para incluir como una librería recomendada en el entorno de aplicaciones MADEJA.

El análisis consideró la difusión de los componentes evaluados en cuanto a la cantidad de proyectos y productos que utilizan el componente y la profundidad, entendiendo estas como el nivel de desarrollo y robustez que ofrece para el desarrollo de aplicaciones JSF.

Resultado ObtenidoComponente
4,52Mojarra
3,96MyFaces
4,57RichFaces
4,22ICEFaces
ValorDescripción
5La implementación o librería tiene una hoja de ruta clara. La comunidad, soporte y documentación oficial es extensa.
3La documentación es clara pero solo en inglés. El tiempo de respuesta de las incidencias es de 3 días.
1El el ciclo de vida de librería o implementación está en decadencia. El número de errores reportados es muy alto

Pruebas

Es de suma importancia contar con una herramienta que permita verificar de manera sistemática una aplicación JSF, ya sea desarrollada con la implementación Mojarra o MyFaces, y con cualquiera de las extensiones evaluadas. La mayoría de las veces es en la capa de presentación donde se carece de pruebas unitarias y pruebas de regresión que permitan reproducir automáticamente y de manera repetitiva los tests de interfaz de usuario. Las herramientas de código abierto seleccionadas para la evaluación de este apartado de Pruebas y para verificar dicho conjunto de requerimientos establecidos son: JSFUnit, Selenium y JMeter.

Resultado ObtenidoComponente
4Mojarra
4MyFaces
2,11RichFaces
2ICEFaces
ValorDescripción
5Es compatible con herramientas de generación de script de interacción del usuario con los controles.
3La ejecución de pruebas integradas con Maven necesita configuración adicional.
1No es posible la automatización de pruebas de interfaz, deben realizarse de manera manual.

Productividad

Debido al auge y popularidad de Eclipse y NetBeans como las dos IDEs open-source más extendidas en el mundo del desarrollo en Java, en este apartado de Productividad, se evalúan aspectos que proporcionan cada una para reducir la complejidad y el tiempo de desarrollo de aplicaciones JSF.

El estudio de estas dos herramientas permite conocer las características de un editor de páginas, generación de código sus limitaciones actuales y su aplicabilidad, mostrando un panorama de lo que falta mejorar e implementar en ellas respecto a la integración con una arquitectura MADEJA.

Otro requisito a evaluar es la facilidad con la que se puede integrar la implementación con herramientas de generación de informes. Como candidatos para este estudio se han seleccionado dos de los componentes open-source más extendidos JasperReport y Seam PDF.

También se evalúa el soporte que proporcionan diferentes herramientas ampliamente usadas para la generación de código esqueleto como punto inicial del desarrollo de la aplicación. Se ha seleccionado AppFuse porque es una suite de arquetipos Maven (archetypes o modelos de proyecto) que permite crear aplicaciones web utilizando varios de los frameworks más utilizados en el mundo Java como Hibernate, Ibatis, Tapestry, Spring MVC y JSF.

Otra herramienta de generación de código esqueleto seleccionada en este estudio es JBoss Seam, con su componente seam-gen . Seam es en la actualidad uno de los frameworks de referencia en torno a los desarrollos Java EE de alta productividad, integrando distintas tecnologías que simplifican la integración, diseño e implementación de distintos proyectos.

Resultado ObtenidoComponente
3,07Mojarra
2,7MyFaces
2,77RichFaces
2,21ICEFaces
ValorDescripción
5Eclipse y NetBeans proporcionan herramientas para reducir la complejidad y el tiempo de desarrollo de aplicaciones JSF. Mediante un arquetipo Maven se pueden generar nuevos controles de interfaz.
3No hay variedad de herramientas en la generación de aplicaciones CRUD.
2Crear nuevos componentes es una tarea compleja. La exportación a PDF es muy básica.

Arquitectura

En este apartado de Arquitectura se estudiaron aspectos diversos somo internacionalización, localización, trazabilidad y gestión de errores.

Cuando se desarrollan aplicaciones con soporte para varios idiomas, es fácil que la traducción de todos los contenidos, el soporte de los estándares de cada país y la traducción de la interfaz se conviertan en una pesadilla. Afortunadamente JSF automatiza de forma nativa todos los aspectos del proceso de internacionalización (i18n). Mediante un fichero de recursos, la aplicación debe estar preparada para seleccionar el fichero apropiado según el idioma, en caso de que sea un idioma no soportad, se seleccionará el idioma por defecto.

Así mismo, los módulos de una aplicación web no deben preocuparse por las diferencias de formato de datos entre países, es decir la localización (l10n). Las bases de datos por ejemplo almacenan las fechas y cantidades siguiendo estándares internacionales. Pero cuando los datos se envían o se reciben del usuario, es necesario realizar una conversión en el formato de fecha y moneda, JSF proporciona componentes estándar que realizan estas tareas.

Para la gestión de mensajes de error, se ha seleccionado la herramienta Log4j debido a que es una librería potente y ampliamente extendida en el mundo Java para la trazabilidad de aplicaciones, además que es la herramienta recomendada por MADEJA.

La gestión de excepciones es una parte fundamental de cualquier aplicación, por lo que se estudiarán las diferentes configuraciones en una aplicación JSF para que en la fase de programación se muestren trazas útiles al programador y en la fase de explotación aporte información útil para resolver incidencias.

Resultado ObtenidoComponente
4,78Mojarra
5MyFaces
4,89RichFaces
5ICEFaces
ValorDescripción
5Las librerías son compatibles con Log4j. Es posible obtener la traza completa de una excepción.Las dos implementaciones cuentan con los convertidores y formateadores JSF estándar para la localización (l10n).
0La librería no cuenta con mecanismos para i18n, l10n y gestión de errores.


Portlets

Los portlets son componentes web gestionados por un contenedor de portlets que procesa peticiones y genera contenido dinámico.El estudio documentó la compatibilidad de los componentes JSF evaluados con las tres principales especificaciones Java sobre portlets.

La especificación JSR-168 define la relación entre los portles y el portal. Es la versión 1.0 de Portlet Specification, del año 2003.

Los principales portales que soportan la especificación JSR-168 son:

  • Oracle WebCenter Suite 11g
  • Oracle WebLogic Portal 10
  • Oracle WebCenter Interaction 10g
  • Oracle IAS Portal 10g
  • SAP NetWeaver 7.0

La especificación JSF-286 evoluciona la JSR -168 que define la relación entre los portles y el portal. Es la versión 2.0 de Portlet Specification, del año 2006.

Los principales productos que soportan la especificación JSR-286 son:

  • Liferay Portal 5.2.2
  • GlassFish Web Space Server 10
  • JBoss Enterprise Portal Platform 2.7
  • Sun Java System Portal Server 7.2
  • Jetspeed 2.2.0
  • WebSphere Portal Server 6.1

La especificación JSR-301 es sobre portlet bridges, surge de la necesidad de unir de alguna manera no intrusiva la manera en que una página JSF y los portlets llevan a cabo el proceso petición-respuesta (request-response), trata de definir una manera estándar de definir los mecanismos de conexión entre los estándares de JSF y portlets, para evitar los problemas que presento la especificación de los Portlets 1.0 , que al carecer de este requerimiento común , obligo a cada portal a desarrollar su propio mecanismos de conexión , haciendo en la práctica imposible la migración de los portlets de un portal a otro.

Así el desarrollo orientado a componentes de esta especificación da las bases para construir un puente (bridge) que comunique una aplicación JSF con el portlet. Existen varios puentes que conceptualmente hacen estas funciones pero que difieren según la versión del portal o de la implementación JSF que se utilice.

Resultado ObtenidoComponente
5Mojarra
0,71MyFaces
4,29RichFaces
2,86ICEFaces
ValorDescripción
5Completamente compatible. No presenta ningún problema de despliegue en los portales con las especificaciones JSR-168, JSR-286 y JSF-301.
3Las aplicaciones necesitan configuración adicional estándar para ser desplegadas en los portales.
1Las aplicaciones necesitan modificaciones manuales y complejas para ser desplegadas en los portales.

Validaciones

La validación en cliente, entendida por la ejecución de código en el cliente que realiza validaciones sin conectarse con el servidor, no es algo positivo de manera aislada. JSF es una tecnología pensada para ejecutarse en el servidor, sobrecargar la pagina generada por JSF por librería de JavaScript que hagan validaciones lleva a aumentar de manera considerable el tamaño de las páginas, ralentizando su carga e introduce posibles incompatibilidades entre las versiones de los navegadores.

Mediante los controles de mensajes y validación de campos de RichFaces y ICEFaces el usuario se siente en todo momento guiado por la interfaz contrariamente a sentirse controlado. Ambas librerías de controles adicionales, tanto RichFaces como ICEFaces, muestran de una manera amigable, al momento de generar un evento como la pérdida del foco o hacer click en un control, un mensaje por cada campo o como a la modalidad tradicional de recibir todos los mensajes de una sola vez en una lista.

Resultado ObtenidoComponente
1,88Mojarra
1,88MyFaces
4,38RichFaces
3,38ICEFaces
ValorDescripción
5El usuario final percibe el control de errores en tiempo real, se pueden hacer comprobaciones complejas en el servidor
3La creación de validadores personalizados es medianamente compleja.
2Los mensajes de validación se muestran de manera tradicional de una sola vez en una lista sin ninguna customización.

Integración capa de Negocio

En este apartado se estudiaron las capacidades de integración con Spring y Seam.

Las responsabilidades de Spring en una aplicación JSF pueden ser muchas, la integración de la capa de persistencia en la de servicios, y la de servicios en la de control, la configuración de diversos componentes como datasources y recursos JNDI, la gestión de la transaccionalidad de los componentes de persistencia y de servicios y la manipulación orientada a aspectos. Adicionalmente también se le puede delegar a Spring el control de la navegabilidad y de la seguridad con dos componentes adicionales Spring Faces y Spring Security.

Seam es en la actualidad uno de los frameworks de referencia en torno a los desarrollos Java EE de alta productividad, integrando distintas tecnologías que simplifican el diseño e implementación de distintos proyectos.

La seguridad en Seam se maneja por unos componentes propios de Seam, que permiten agilizar el desarrollo, y que nos proporcionan un marco versátil para adaptarlos a nuestras necesidades concretas

La seguridad con Spring no se integra con una aplicación JSF de una manera automática, son frameworks completamente independientes que pueden trabajar en conjunción, por lo que debe hacerse un estudio detallado de ambos, conociendo cuales son sus características y como se configuran.

Resultado ObtenidoComponente
5Mojarra
3,5MyFaces
5RichFaces
4,71ICEFaces
ValorDescripción
5La integración de Spring y Seam es completamente transparente. La configuración de Spring Security y Seam security es estándar. La navegación entre las páginas de la aplicación puede ser potenciada con Seam o con Spring
2La integración de Spring y Seam necesita configuración adicional. La configuración de Spring Security y Seam security no es posible. La navegación entre las páginas de la aplicación puede ser potenciada con Seam o con Spring con configuración manual adicional.

Controles UI

En este apartado de Controles UI se estudió la robustez que ofrecen las librerías de controles adicionales RichFaces y ICEFaces, y las implementaciones, respecto a los controles de interfaz de usuario mayormente utilizados en una aplicación tipo intranet o internet.

Los controles de interfaz que ambas librerías, tanto RichFaces como ICEFaces proporcionan son:

  • Editor de texto enriquecido
  • Control drag and drop
  • Texto predictivo
  • Combos dinámicos anidados
  • Combo autocompletado
  • Barras de herramientas
  • Barras de progreso
  • Subir ficheros
  • Diálogos Modales
  • Pestañas
  • Árboles
  • Listas paginadas
  • Columnas de tablas ajustables en tamaño
  • Agrupar filas de tablas
  • Ordenar por columnas
  • Google Map
  • Efectos visuales
  • Visor de PDFs
  • Visor Flash
  • Visor QuickTime
  • ToopTip
  • Calendario
  • Ventanas emergentes
  • Paneles

Los controles de interfaz que sólo proporciona RichFaces y que carece ICEFaces son:

  • Virtual Earth SDK
  • Java Graphic2D

Los controles de interfaz que sólo proporciona ICEFaces y que carece RichFaces son:

  • Gráfico de barras
  • Gráfico de tarta
  • Estado de la red
  • Visor WMP
  • Descargar fichero
  • Exportar a XLS, CSV
  • Exportar a PDF
Resultado ObtenidoComponente
0,32Mojarra
0,32MyFaces
3,79RichFaces
4,47ICEFaces
ValorDescripción
5La librería cuenta con controles JSF potentes, robustos y atractivos visualmente. Los controles permiten desarrollar aplicaciones muy dinámicas que requieran demasiadas zonas actualizadas de manera asíncrona.
3El conjunto de controles de interfaz es limitado. Los controles no tienen soporte Ajax por defecto.
1Los controles son muy básicos y el conjunto es muy limitado.

Documentos