Anda di halaman 1dari 52

JBoss Seam in action

Ing. Ariel Ludueña – ariel.luduena@moove-it.com


Ing. Martín Cabrera - martin.cabrera@moove-it.com
JUGUY – OpenUY ‘08

Segundo evento del grupo junto con el


UYLUG y el apoyo de la IMM

www.openuy.org

Están todos invitados a participar y colaborar


en la organización y armado del evento !!!
Sobre nosotros …

Ing. Martín Cabrera


Fundador Juguy
Director y Consultor de moove-iT
www.linkedin.com/in/martincabrera

Lic. Ariel Ludueña


Miembro del Juguy
Director y Gerente de Investigación & Desarrollo de moove-iT
www.linkedin.com/in/luduenaariel

Experiencia docente en Java y Java EE


Desarrollamos en JBoss Seam !!
Objetivos de la charla

Introducir en las herramientas de JBoss


Introducir en el desarrollo de aplicaciones
utilizando JBoss Seam

Objetivo secundario …
“Demostrar que con JEE se pueden hacer
aplicaciones con alto nivel de productividad.
(en serio :)”
De que vamos a hablar

Introducción a Java EE
Introducción a frameworks de uso general en
Java EE
Introducción a JBoss Seam
Caso práctico con Seam
Requerimientos
Arquitectura general
Conclusiones
Arquitectura Java EE

http://java.sun.com/javaee/5/docs/tutorial/doc/bnacj.html
APIs más relevantes

Enterprise Java Bean (EJB)


Java Persistence API (JPA)
Java Server Faces (JSF)
Java Authentication and Authorization Services
(JAAS)
Java Naming And Directoriy Interface (JNDI)
Java Database Connectivity API (JDBC)

Otros:
JCA, SAAJ, JAXB, JMS, JMX, JSP, Servlet, JSTL, Java
Mail, JAF, JAXP, JAX-WS, JAXB, JAXR, StAX, SAX, etc.
Etc.
Cadena de producción

(esta imagen cumplió varios años …)


Aplicación Java EE de ejemplo

Facelets + JSF + EJB + JPA


Problemas típicos …

Complejidad en la arquitectura
Tengo 2,3,4 o “n” formas de hacer las cosas
Soluciones “puristas”
Soluciones terroristas
Soluciones que cumplen con el objetivo
Asociar a Java con desarrollos complicados
Complicar el diseño por parte de los arquitectos
Elegir entre los 1000 frameworks existentes
Development … IDEs, Maven, Ant, SVN, CVS
Deployment
Elegir entre los 100 Application Servers
El que no tuvo problemas que levante la mano !
Proyectos de Jboss

http://jboss.org/projects
Respuesta a nuestras plegarias … JBoss Seam

Application Framework para aplicaciones


Java EE
Integra:
Asynchronous JavaScript and XML (AJAX)
Java Server Faces (JSF)
EJB 3
JBPM
Principios de JBoss Seam

“Single Tier” … ¿porqué no?


No hay distinciones de capas (negocio, presentación,
componentes). Nosotros definimos la arquitectura !
Integración de EJB 3 con JSF
Java EE no provee una forma standard de integrarlos
Con Seam
Todo puede ser un EJB
Todo NO puede ser un EJB.
Integración con AJAX
Icefaces o Richfaces (default)
Provee manejo de remoting desde código Java Script
Principios de JBoss Seam

Integración con procesos de negocio (JBPM)


Personalmente creo que gran parte de los sistemas que
desarrollamos son procesos (simples o complejos)
Manejo de estados (contextos)
Ariel … toda tuya !
Bijection
Asignar una variable a un contexto (en las dos
direcciones)
Menos XML
Seam extiende las anotaciones de EJB 3 con manejo de
estado y contextos declarativos
Integración con testing
¿Porque Seam?

Si quedan dudas …
porque en breve se transformará en especificación
Web Beans
Seam-gem … generador de código
A partir de entidades anotadas
A partir de la Base de datos
Genera páginas, clases Home y List por entidad
Jboss Tools - Plugins para eclipse
Visor de JSF
Crear proyectos Seam (EAR o WAR)
Propone una arquitectura y un conjunto de tecnologías: Richfaces y
Facelets
Seam – “Contextual Components”
Seam – “Contextual Components”
Temas importantes. (no se duerman)

Contextos
Cuales son y para que sirven?
Business Context!
Rápida explicación de JBPM
Componentes Seam
Quienes pueden ser y como se identifican.
Colocar y obtener componentes de los contextos
Por medio de annotations con Bijection (Injection +
Outjection)
Programáticamente
Contextos JEE

Application
Session
Request
Page (JSP)

Pregunta:
Estos contextos son suficientes?
Contextos en Seam

Application
Business
Session
Conversation
Page
Event

Sirven para algo tantos contextos?


Contextos en Seam
Contextos a analizar

Application
Business
Session
Conversation
Page
Event
Conversation Context

Concepto de “unit of work”


Problema: Creación de wizards.
Conversation Context

Problema: Creación de wizards.


Conversation Context

Problema: Creación de wizards.


Conversation Context

Problema: Creación de wizards.


Conversation Context

Problema: Creación de wizards.


Conversation Context

Cuando se termina el flujo se destruyen las


variables en el contexto
No me tengo que preocupar por nada!
El flujo se termina por:
Se da por finalizado el flujo.
El usuario selecciona algo fuera del flujo.
Conversation Context

Como se crea un contexto?


Al llamar a un método. (método anotado con
@Begin)
Al ir a una página. (XML de la página con <begin-
conversation join="true"/>)
Conversation Context

Como se crea un contexto?


Al llamar a un método. (método anotado con
@Begin)
Al ir a una página. (XML de la página con <begin-
conversation join="true"/>)
Conversation Context

Como se crea un contexto?


Al llamar a un método. (método anotado con @Begin)
Al ir a una página. (XML de la página con <begin-
conversation join="true"/>)
Como se destruye?
Al llamar a un método. (método anotado con @End)
Regla de navegación. (Regla en el XML de la página con
<end-conversation/>)
Pinchando un s:link con atributo (propagation=“end”)
Ejemplos:
Pagina: categoryEdit.xhtml
XML: categoryEdit.page.xml
Ejemplos:

No propagar la conversación

Iniciar y terminar conversación con métodos


Business Context

Se almacena el estado de los procesos de


negocio definidos.
Concepto de “long running business process”
Utiliza JBoss JBPM como motor de workflow.
Definición de un Proceso de negocio
Instanciar un proceso de negocio

Llamar a un método anotado con:


@CreateProcess(“nombre_del_proceso”)
A partir de la invocación anterior se crea una
instancia de proceso y el contexto asociado.
Se ejecuta automáticamente la transición
inicial.
La primer tarea es creada. El “pool de
actores” asociado la puede ver.
Componentes Seam

Un componente seam es toda clase anotada


con @Name(“nombre_componente”)
Los componentes pueden ser:
EJB 3.0 Session Beans (Statefull y Stateless)
EJB 3.0 Entity Beans
MDBs 3.0
POJOs
Colocar y Obtener componentes
Bijection
Concepto de “Injección de dependencias”
Variantes en Injection
Variantes en Injection
Alternativa a Injectar…

Alternativa programática.
Que sabemos hasta ahora?
Que nos falta?

Seguridad
Autenticación
Autorización

Flujo entre páginas


Reglas de navegación de Seam (“Stateless
Model”)
JPDL - Pageflow (“Stateful Model”)
Seguridad

Componente Identity
Almacena la identidad del usuario.
Esconde la complejidad de la autenticación y
autorización.
3 pasos para la autenticación
3 pasos de autenticación
Autorización

A nivel de componente.
A nivel de página.
A nivel de navegación entre páginas.
Flujo entre páginas

JSF o Seam Flow


Stateless
No toma en cuenta el estado de la aplicación
Solo se basa en la página de donde viene y a donde va
El código en java es más complejo
JPDL / Pageflow
Stateful
Toma en cuenta el estado para el ruteo
Las reglas son más complejas pero el código en java es
más simple
Basta de hablar!

A probar algún ejemplo


Muchas gracias !!!

www.moove-it.com
www.juguy.org