lunes 26 de enero de 2009

Desarrollo de aplicaciones con IWebMvc2 - Parte I

Sin duda el espacio reservado a los frameworks web en Java está abarrotado. Los hay de todos los tipos, desde el tradicional Model2 (Spring MVC) al basado en componentes (Wicket). Tenemos alternativas que se ejecutan completamente en servidor (Seam) a algunas que trasladan gran parte de la lógica a Javascript procesándose en la máquina cliente (DWR). Tenemos librerías especializadas en aplicaciones CRUD (OpenXava), con su propio lenguaje dinámico (Grails), patrocinadas por fundaciones o empresas potentes, orientadas a entornos móviles y más. Todas ellos facilitan el desarrollo y en general están orientados al desarrollador. La pregunta es, ¿entonces por qué IWebMvc?

La respuesta es simple, una vez evaluadas todas las alternativas y decida la mejor para una aplicación concreta es muy posible que encontrar que lo ideal es un framework para la lógica de negocio, otro para la capa de web, componentes ricos para el cliente, integración de la comunicación cliente servidor, una capa de abstracción para el acceso a datos, seguridad y más.. Esto es lo que se denomina "full stack", es decir, un entorno. Seam, por ejemplo, provee uno basado en EJB3 y JSF. Pero ¿y si no interesa una aproximación basada completamente en servidor? Pues la lista se acorta a pasos agigantados. Ante esta situación existe una alternativa como Appfuse que integra muchos frameworks distintos pero ofrece muy poca funcionalidad añadida. O realizar la labor de integración individualmente, lo cual requiere un plus de esfuerzo. IWebMvc ofrece una plataforma completa perfectamente configurada basada en los, bajo una opinión personal, productos más interesantes y potentes en el entorno Open Source en Java que son:


  • Spring
    Un contexto de inyección de dependencias específicamente diseñado para funcionar como middleware ofreciendo la misma capacidad que un servidor de aplicaciones pero de forma modular. Sus extensiones para web (MVC, Webflow) y seguridad son reconocidas como de lo mejor del mercado. Y es prácticamente ubicuo en el desarrollo de Java empresarial.

  • JPA/Hibernate
    El estándar para el acceso a base de datos con la capacidad de un ORM muy potente que además extiende la base con posibilidaddes como la cache de segundo nivel o la búsqueda por texto libre.

  • DWR
    La herramienta más sencilla para eliminar la barrera entre las diferentes metodologías a la hora de programar código cliente y código servidor.

  • dojo
    No existe una alternativa con una licencia OSS equivalente y que aporte tanto soporte al desarrollo en Javascript como una librería de componentes AJAX tan completa.

  • Groovy
    De manera que se pueda prototipar rápidamente código con un lenguaje dinámico.

  • Y más...
    Como, por ejemplo, JAWR, una librería dedicada a la distribución de JS/CSS de manera inteligente (¡que además esta desarrollada por otro español!), The Legion of Bouncy Castle para criptografía, Ant+Ivy para la gestión transitiva de dependencias o JasperReports para los informes.

Es posible partir de cero en la configuración de un proyecto con estos mismos pilares pero ¿que sentido tendría? Hoy por hoy, IWebMvc en su version 2.0 ofrece la mejor integración entre Spring/DWR existente. Y no es ésta una afirmación baldía ya que el propio desarrollo de IWebMvc ha impulsado el diseño y codificación de muchas de las mejoras que incluye la version 3.0 de DWR (en la particular de la parte relativa a la integración con Spring), como ha podido ser el escaneo de la vía de construcción, el mejorado soporte de anotaciones, los conversores integrados con el contexto, etc. Probablemente incluso no sería descabellado incluir dojo en este mismo apartado ya que no existen muchos proyectos que ofrezcan out-of-the-box este nivel de entrelazado.

Pero IWebMvc va un paso más allá e incluye un soporte CRUD completo basado en AJAX (como todo en el resto del proyecto). Es decir, sin haber codificado una línea de código, el desarrollador obtiene un entorno configurado y la gestión de cualquier tipo de entidad persistida en una tabla de la base de datos. Y además todo esto construido mediante widgets reutilizables de manera que es posible gestionar la creación de nuevas pantallas en base a la paleta existente así como extender ésta mediante nuevos tags.

Para terminar este primer artículo conviene repasar aunque sea de una manera somera parte de la lista de componentes de la plataforma. Las capturas son del tema por defecto e idioma inglés pero, por supuesto, esto cambia a voluntad del usuario.

  • Básicos
    Los campos de texto, moneda, fecha, listas de valores, checkbox y otros del estilo estan perfectamente representados. Por ejemplo:


  • Avanzados
    Existen widgets utilizables en formularios (con una correspondencia en servidor) que se alejan del típico campo de texto. Por ejemplo, la carga de ficheros, el de puntuación, la selección de color, el texto internacionalizado...


  • Tabla paginada
    El componente de tabla paginada es la base sobre la que se desarrollan un número importante de los componentes más complejos. Entre sus funcionalidades destacan la carga vía AJAX, la paginación, la ordenación, la recolocación de columnas, la ocultación dinámica de columnas, el menu contextual o la selección múltiple. Una tabla paginada tiene una correspondencia uno a uno con una entidad de la base de datos. El desarrollador sólo necesita indicar cual.


  • Seguridad
    CAPTCHA, identificación o desconexión son funcionalidades ofrecidas por defecto. Como siempre, todo por AJAX.


  • Localizador
    Construido sobre la base de la tabla filtrada (una capacidad extra de la tabla base) permite referenciar el objeto actual con otras entidades de la base de datos. Estaríamos hablando del lado izquierdo en una relación 1-N (o una clave externa o foreign key).


  • Colección
    Para tratar las relaciones 1-N desde el punto de vista contrario


  • Direcciones
    Algunas entidades comunes que acaban por incluirse en todas las aplicaciones como puede ser pais, provincia, direccion o sexo vienen predefinidas y con sus widgets particulares. ¡Integrados con las APIs AJAX de Google!


  • CRUD
    Finalmente, el widget mas complejo de la plataforma permite trabajar con una entidad listándola (con filtros o búsquedas estilo Google), creando informes, trabajando en modos de vista o edición, modificando los registros, generando nuevos objetos o eliminando filas existentes. ¡Incluyendo entidades anidadas!



Por supuesto, no todos los componentes tienen interfaz gráfica. Por ejemplo, IWebMvc ofrece hasta tres almacenes de datos (data stores) compatibles con dojo o incluye tags para encriptar datos en cliente, generar identificadores únicos, claves internacionalizadas acopladas con el Locale de Spring o la inclusión inteligente del Javascript en una página (cumpliendo con las normas de rendimiento de Yahoo!).

En el próximo artículo explicaré como configurar una aplicación con IWebMvc 2.0 y como generar una página como la de este vídeo en cinco líneas de código. Para ir abriendo boca la aplicación de demonstración está disponible en el repositorio.