Seleccionar página

Modelo de programación

Tiene un diseño 100% basado en componentes.

Capas afectadas

JBoss Seam ofrece una solución completa para el desarrollo web que abarca todas las capas, desde la de presentación hasta la de integración.

MVC push/pull

Sigue un modelo Pull en el que desde una página puede referenciarse cualquier componente que esté asociado a un contexto accesible.

Internacionalizacion (i18n) y localización (L10n)

Proporciona varios componentes para manejar los mensajes multidioma.

Determina automática el Locale de cada petición y lo usa si está disponible en la aplicación. También permite sobreescribir el Locale detectado y/o establecer uno por defecto. Se pueden configurar los mensajes en archivos de recursos tipo bundle.

Para los mensajes de error o éxito se puede hacer uso de la clase de FacesMessages incluida con JSF.

Dispone de una clase que se encarga de parsear automáticamente los formatos horarios al formato establecido.

Sistema de seguridad

El Seam Security API es una parte de Seam que proporciona funcionalidades de autenticación y autorización basado en JAAS (Java Authentication and Authorization Service). Puede usarse el modo sencillo por defecto que se basa en roles o usar el framework JBoss Rules, que ofrece un sistema más poderoso basado en reglas. El sistema se encarga del manejo de errores de autorización o autenticación permitiendo redirigir al usuario a una página determinada.

Las restricciones pueden establecerse mediante el uso de anotaciones. Permite restringir tanto acciones como entidades o páginas o componentes de la página.

Sistema de plantillas (templates)

Seam viene integrado por defecto con Facelets.

Facelets es un sistema de plantillas para JSF. Permite definir la vista mediante xml en forma de árbol de manera que se pueden definir componentes como composición de otros componentes. Entre sus características destacar que soporta el lenguaje EL, composición a partir de diferentes archivos, decorators y reporte de errores indicando la etiqueta/linea precisa.

Sistema de validación

Las restricciones se definen en los componentes de entidad mediante las anotaciones de la especificación JPA o haciendo uso de las anotaciones de la extensión Hibernate Validator.

Para especificar en la página los componentes que deben ser validados se proporcionan etiquetas para definirlos uno a uno o validar todos los campos del formulario.

La validación puede realizarse en segundo plano mediante Ajax y los mensajes de error pueden leerse de un archivo de recursos tipo bundle o especificarlos en la propia anotación si se usa Hibernate Validator.

Sistema de navegación (pageflow)

Podemos seguir dos modos de navegación, uno que tiene cuenta el estado de la aplicación (stateful) usando el framework jPDL y otro que no (stateless) usando las reglas de navegación JSF Rules o Seam Rules.

Para aplicaciones sencillas tan solo necesitaremos el modelo stateless, pero las aplicaciones complejas hacen uso de ambos. jPDL (jBPM Process Definition Languaje) define un sistema de navegación basado en un grafo de nodos y transiciones. La elección del siguiente estado dependerá del valor de ciertas variables. La configuración puede hacerse mediante XML o anotaciones

Gracias al contexto de conversación capaz de almacenar el estado de los componentes, Seam funciona perfectamente con el botón de navegación “Atrás” del explorador.

Sistema de caché

En total podemos encontrar varios sistemas de caché.

En primer lugar podemos encontrar la importantísima caché de la base de datos.

Después existe otra caché en la solución ORM adoptada.

El contexto de persistencia manejado por Seam actúa como caché de los datos leídos en la conversación actual.

También pueden guardarse datos no transaccionales en el contexto de aplicación.

La aplicación puede almacenar datos en memoria utilizando el sistema JBoss Cache, que ofrece una cache estructurada en forma de árbol, con posibilidad de cluster y transaccional.

Testeabilidad

Al ser POJOs todos los componentes, los test de unidad son triviales. También se proporcionan anotaciones para facilitar la recreación del entorno.

Para los test de integración proporciona un contenedor de EJBs y declaración de objetos mock mediante anotaciones.

La herramienta SeamGen crea automáticamente test de unidad estándar y test TestNG que simulan peticiones y respuestas JSF para cada acción mediante scripting.

Mapeo Objeto-Relacional (ORM)

Seam proporciona soporte completo para las dos arquitecturas de persistencia más populares: hibernate 3 y el Java Persistence API introducido con EJB 3.0.

A través de el contexto de conversación y los componentes con estado asociados a él, es capaz de manejar eficientemente las operaciones transaccionales e implementar el patrón de carga perezosa (LazyLoad) sin los errores presentes en otras soluciones ORM.

Programación Orientada a Aspectos (AOP)

JBoss Seam hace uso extensivo de AOP para proporcionar funcionalidades de caché, seguridad, inyección de dependencias, interceptores, pageflow…

Inyección de dependencias (DI)

No solo soporta Dependency Injection si no que también permite Dependency Outjection, depositando y obteniendo instancias de un componente de los diferentes contextos, cada una de ellas con su propio estado.

Ajax

El diseño de JBoss Seam ha sido concebido con Ajax en mente. Es capaz de manejar peticiones simultáneas de distintos usuarios preservando las condiciones de aislamiento e integridad de los datos. El sistema de cache evita la sobrecarga de tráfico con la base de datos que afecta a muchas aplicaciones que usan Ajax.

El soporte en la parte del cliente está a cargo de la implementación de JSF que se elija. En cualquier caso, mediante la librería Ajax4jsf de JBoss se pueden añadir funcionalidades Ajax a los componentes ya existentes.

Configuración

La configuración puede realizarse en su práctica totalidad mediante anotaciones, lo que ayuda a simplificar esta tediosa tarea. Aún así, hay una pequeña cantidad de configuración que debe hacerse con XML (como la relativa a JSF). Afortunadamente, esta configuración es autogenerada por la herramienta SeamGen. En caso de no hacer uso de ella, la configuración puede copiarse de las aplicaciones de ejemplo. Además, el framework sigue la filosofía de “configuración por omisión”: Todos los componentes vienen con un comportamiento por defecto que solo hace falta redefinir si queremos personalizarlos.

También permite la configuración de los componentes internos del framework a través del archivo seam.properties.

Extensibilidad

El diseño basado en componentes le permite integrarse con numerosas tecnologías tan dispares como Google Web Toolkit, Spring, Groovy… ademas de las propias de JBoss que vienen integradas por defecto.

Madurez

En el diseño de JBoss Seam han participado pesos pesados del desarrollo de software como Gavi King (creador de Hibernate) y se asienta sobre principios que han popularizado frameworks como RubyOnRails o Spring.

Además, es una de los freameworks que se están tomando como referencia para futuros estándares como WebBeans.

Última versión

La última versión es JBoss Seam 2.0.0 CR2 y data del 5 de octubre del 2007.

Curva de aprendizaje

JBoss Seam sigue un modelo de programación muy sencillo y uniforme, basado en componentes y anotaciones en todas las capas de la aplicación. En ningún momento hace falta extender una clase ni implementar un interfaz, no tienes que aprenderte ningún API, simplemente un par de conceptos. Esto hace que la curva de aprendizaje sea muy muy suave.

Documentación

En la distribución de Seam se incluyen varias aplicaciones de ejemplo que cubren casi todas las funcionalidades del framework. El tutorial oficial es muy extenso. En él se detallan todos los aspectos del framework con códigos de ejemplo. Explica los conceptos, las diferentes configuraciones posibles, las anotaciones, la integración con otras tecnologías, etc…