Introducción Seam

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Notes on slide 1

    Aca me mando la parte con un ejemplo utilisima

    3 Favorites

    Introducción Seam - Presentation Transcript

    1. Introducción Framework JBoss Seam
    2. Sebastián Javier Marchano
      • Estudiante Ingeniería Sistema Información - UTN
      • Experiencia + 3 años
      • Consultor JBoss Seam
        • Perú, Paraguay, Argentina
      • Desarrollador Senior JEE
        • GranDT - Clarín (Cluster)
        • ACG & ElComercio – BristolGroup (Desarrollo)
        • Lotería de Buenos Aires (Reingeniería)
        • PagoMisCuentas - Banelco (Desarrollo)
    3. Agenda
      • Introducción a Seam
      • Introducción a EJB3
      • Introducción a JSF
      • Validaciones
      • Componentes
      • Contextos
      • Seguridad
      • Eventos e Interceptores
      • Seam provee mecanismos potentes para juntar componentes
      • Conceptos fundamentales
        • Contexto
          • Seam agrega conversaciones y procesos de negocios
        • Componentes
          • Objetos stateful (EJB3, Java Bean, virtualmente cualquier clase)
          • Una instancia de un componente es asociada a un contexto
      Seam
      • Bijection
          • Más de IoC ( Inversion of Control )
          • Componentes pueden ser inyectados a otro (inyección)
          • Un componente puede poner otro componente en un contexto (eyección)
          • Crea alias a los nombres de los componentes internos (variables de instancias) a nombres contextuales
          • Permite la creación de árboles de componentes en forma dinámica y la modificación de los mismos a través de Seam
      Seam
    4. Contexto Conversacional
      • Conversaciones en Seam, una primer mirada…
        • Es un contexto entre sesión HTTP y request
        • Está asociada a la sesión HTTP y es identificado por un ID
        • Es pasado a través de parámetros del request o campos de los formularios
        • Le permite a uno claramente separar múltiples diálogos
        • Soporta redireccionamiento
    5. Contexto Conversacional
      • Caso de uso para conversación
        • Mostrar mensajes después de un redireccionamiento
          • Después de eliminar una bicicleta, redireccionar a la lista de bicicletas
          • Mostrar el mensaje: La bicicleta XXX fue eliminada
        • Diálogos tipo wizard
          • Alquilar una bicicleta
          • Seleccionar una bicicleta, agregar opciones en la segunda página
    6. Contexto Conversacional
      • Caso de uso para conversación
        • Diálogos múltiples
          • Un usuario puede tener varias ventanas del navegador para editar información de la bicicleta
        • Redireccionamiento después de post
          • Presionar F5 no hará un nuevo post de la información, sino que mostrará nuevamente la misma información
    7. Ejemplo de aplicación
      • Caso de uso
        • Mostrar una lista de bicicletas
        • Seleccionar una bicicleta para editar
        • Grabar o eliminar una bicicleta
    8. Utilizando componentes Seam @Name(&quot;bikeService&quot;) public class BikeServiceBean { ... @DataModel private List<Bike> bikes; @Factory(value = &quot;bikes&quot;) public void loadBikes() { bikes = controller.listBikes(); } ... } Componente con nombre “bikeService” Componente con nombre “bikes” contiene la información de una lista de “bikes” Factory, responsable de crear el componente “bikes”
    9. Utilizando componentes Seam
      • <h:form>
      • <h:dataTable value=&quot;#{bikes}&quot; var=&quot;b&quot;>
      • <h:column>
      • <f:facet name=&quot;header&quot;>Id</f:facet>
      • #{b.id}
      • </h:column>
      • <h:column>
      • <f:facet name=&quot;header&quot;>Name</f:facet>
      • #{b.name}
      • </h:column>
      • <h:column>
      • <f:facet name=&quot;header&quot;>Description</f:facet>
      • #{b.description}
      • </h:column>
      • </h:dataTable>
      • </h:form>
    10. Utilizando componentes Seam JSF Renderiza una página resuelve #{bikes} renderiza #{bikes} busca en el contexto crea BikeService si es requerido llama al factory agrega al componente “bikes” al contexto devuelve “bikes” Contexts Event Conversation Session Business Process Services Persistence Context Management Application State Management Seam
      • Introducción a Seam
      • Introducción a EJB3
      • Introducción a JSF
      • Validaciones
      • Componentes
      • Contextos
      • Seguridad
      • Eventos e Interceptores
    11. Introducción a EJB3
      • J2EE es un estándar, implementado por varias compañías
      • Define una plataforma – servidor de aplicaciones J2EE
        • APIs y políticas establecidas
      • Especifica un modelo de programación de aplicaciones
        • Session Beans
        • Message Driven Beans
        • Entity Beans
    12. Introducción a EJB3
      • Session Beans
        • Implementa la lógica de negocio
        • Tipos de session beans
          • Stateful Beans  Carrito de compras
          • Stateless Beans  Obtener la lista de clientes
        • Basado en clases tipo POJO
        • Requiere de interfaces
    13. Introducción a EJB3
      • Ejemplo de Session Bean
        • Interface
              • import javax.ejb.Local;
              • @Local
              • public interface Bike {
              • public void listBikes();
              • }
        • Implementación
              • @Stateless
              • public class BikeServiceBean implements BikeService{
              • @PersistenceContext
              • private EntityManager em;
              • public void loadBikes() {
              • private List<Bike> bikes = em.createQuery(&quot;select b from Bike b&quot;).getResultList();
              • }
              • }
    14. Introducción a EJB3
      • Funcionalidad de EJB3
        • Inyección de componentes EJB3 es posible (inversión de control)
      • @PersistenceContext
      • private EntityManager em;
        • Manejo por defecto de transacciones y excepciones para llamadas a métodos
        • Opcional: especificar el comportamiento deseado
      • @TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
      • public void loadBikes() {
      • bikes = em.createQuery(&quot;select b from Bike b&quot;).getResultList();
      • }
    15. Introducción a EJB3
      • Entity Beans
        • Iguales a las clases mapeadas por Hibernate
        • @Entity
        • public class Bike {
        • @Id
        • @GeneratedValue(strategy = GenerationType.AUTO)
        • private Long id;
        • @NotNull
        • private String name;
        • public Bike() {
        • }
        • public String getDescription() {
        • return description;
        • }
        • public void setDescription(String description) {
        • this.description = description;
        • }
        • .....
    16. Introducción a EJB3
      • Message Driven Beans
        • Usados para comunicación asincrónica
        • Pueden ser enviados a sistemas locales o remotos
        • Integración simple con JBoss Seam
      • Introducción a Seam
      • Introducción a EJB3
      • Introducción a JSF
      • Validaciones
      • Componentes
      • Contextos
      • Seguridad
      • Eventos e Interceptores
    17. Introducción a Java Server Faces
      • Framework Web orientada a componentes
      • Interacción con el servidor a través de eventos
      • Componentes stateful
        • Por ejemplo: click item 3 en una lista
      • Estándar definido con una implementación de referencia http://java.sun.com/javaee/javaserverfaces
      • Disponibilidad de componentes Web opensource y comerciales
    18. Introducción a Java Server Faces
      • Elementos de JavaServer Faces
        • JSP/XHTML para dibujar la vista
        • Bean de soporte
          • Componentes de la vista ( actions )
          • Métodos de actions
          • Listener de actions
          • Puente a la lógica de negocio
        • Reglas de navegación
        • Validaciones
        • Convertidores
    19. Introducción a Java Server Faces
      • Componentes de vista
        • Una página JSF está compuesta por componentes
        • Tipos
          • Elementos de HTML: input text, checkbox
          • Componentes de control secundario
          • Librerías de componentes utilitarios
        • Funcionalidad
          • Renderiza
          • Puede tener validadores y convertidores
    20. Introducción a Java Server Faces
      • Ciclo de vida de un request
      • La actualización del modelo sincronizará los componentes en memoria
      • La fase Invoke llama a los action listeners y ejecuta action methods
      • Cada fase dispara eventos y algunas pueden ser salteadas si existe algún error
      • Ejemplo de componentes de vista
      • public class CustomerBean {
      • private HtmlPanelGrid panel;
      • public String leave() {
      • // navigate to home page
      • return &quot;home&quot;;
      • }
      • public void add(ActionEvent event) {
      • ....
      • // some example customer
      • Customer customer = new Customer(4711, &quot;Redhat&quot;, &quot;United States&quot;);
      • HtmlOutputText text = (HtmlOutputText)
      • application.createComponent(HtmlOutputText.COMPONENT_TYPE);
      • text.setValue(customer.getId());
      • panel.getChildren().add(text);
      • ...
      • }
      Introducción a Java Server Faces
    21. Introducción a Java Server Faces
      • Configuración de componentes y reglas de navegación definido en faces-config.xml (carpeta: /WEB-INF/)
      • <faces-config ...>
      • <navigation-rule>
      • <from-view-id>/customers.jsp</from-view-id>
      • <navigation-case>
      • <from-outcome>home</from-outcome>
      • <to-view-id>/home.jsp</to-view-id>
      • </navigation-case>
      • </navigation-rule>
      • <managed-bean>
      • <managed-bean-name>customerBean</managed-bean-name>
      • <managed-bean-class>com.jboss.jsf.CustomerBean</managed-bean-class>
      • <managed-bean-scope>session</managed-bean-scope>
      • </managed-bean>
      • </faces-config>
    22. Introducción a Java Server Faces
      • Validación
        • Los validadores son agregados a las páginas JSF
        • Los mensajes de error son guardados
      • <h:inputText value=&quot;#{customerBean.name}&quot;>
      • <f:validateLength minimum=&quot;4&quot; maximum=&quot;20&quot;/>
      • </h:inputText>
      • Introducción a Seam
      • Introducción a EJB3
      • Introducción a JSF
      • Validaciones
      • Componentes
      • Contextos
      • Seguridad
      • Eventos e Interceptores
    23. Validación de campos
      • Escenarios de valores ingresados incorrectos
        • El usuario puede ingresar valores incorrectos en cualquier momento
        • Combinaciones de valores no permitidos
          • Por ejemplo: fecha final anterior a fecha inicial
        • Manipulación de parámetros de request
    24. Validación de campos
      • Diferentes niveles de validación
        • Validación básica de parámetros
          • No nulo, longitud, mayor a, menor a, es una fecha ..
        • Validación en el contexto de lógica de negocio
          • El nombre de usuario todavía no existe
          • Si un entrenamiento es mayor a 8 horas, es necesario que se seleccione algún tipo de almuerzo también
    25. Validación de campos
      • ¿Dónde ubicar la validación?
        • Directamente en la vista
      • Ejemplo de un validador de JSF
      • <h:inputText value=&quot;#{customerBean.name}&quot;>
      • <f:validateLength minimum=&quot;4&quot; maximum=&quot;20&quot;/>
      • </h:inputText>
        • ¿Por qué no?
          • Un cliente de Web service no pasa a través de esta validación
          • Mal diseño: las reglas de validación son parte del dominio del objeto (encapsulación)
          • Podemos olvidarnos de alguna validación en una página
    26. Validación de campos
      • Validación en Seam
        • Basado en Hibernate Validator Framework
        • Usa anotaciones
        • Extendible con validaciones programadas
        • Ejemplo:
      • public class Bike implements Serializable {
      • @Length(min = 3, max = 254)
      • private String name;
      • @Min(0)
      • private double price;
      • ....
    27. Validación de campos
      • Validaciones de fábrica
          • // applies to String // applies to collections
          • @Length(min=, max=) @Size(min=, max=)
          • // numeric field /* validate nested object or
          • // or String holding a number collection */
          • @Max(value=) @Valid
          • @Min(value=) private Address address;
          • @Range(min=, max=)
          • @Email
          • @NotNull
          • @NotEmpty /* = NotNull + non empty // regular expressions
          • String or Collection */ @Pattern(regex=&quot;regexp&quot; , flag=)
          • @Patterns( {@Pattern(...)} )
          • // Date specific
          • @Past
          • @Future
    28. Validación de campos
      • Personalizar mensajes de las validaciones
        • JSF imprime su propio mensaje si los campos requeridos son vacíos, por defecto están en jsf-impl.jar
      • javax.faces.component.UIInput.REQUIRED=I really need it.
        • Mensajes de Hibernate Validator , por defecto están en hibernate-validator.jar
        • @Length(min=3, &quot;The name is by far to short.&quot;)
        • private String name;
        • Seam Generator sobrescribe todos los mensajes por defecto
          • Archivo 'messages.properties' en la carpeta 'resources'
    29. Validación de campos
      • Validaciones propias
        • Implementación de la anotación de Validator
        • // anotación GooName.java
        • @ValidatorClass(GoodNameValidatior.class)
        • @Target({ElementType.METHOD, ElementType.FIELD})
        • @Retention(RetentionPolicy.RUNTIME)
        • @Documented
        • public @interface GoodName {
        • String message() default &quot;{validator.goodName}&quot;;
        • }
        • // en el archivo message.properties
        • validator.goodName=Good bike names start with Seam
    30. Validación de campos
      • Validaciones propias
        • Implementación de la clase Validator
          • public class GoodNameValidatior implements Validator<GoodName> {
          • private GoodName goodName;
          • public boolean isValid(Object o) {
          • if (o == null) return true;
          • if (o instanceof String) {
          • String value = (String) o;
          • return value.startsWith(&quot;Seam&quot;);
          • } else
          • return false;
          • }
          • public void initialize(GoodName goodName) {
          • this.goodName = goodName;
          • }
          • }
      • Integración en JSF
        • Validación de un campo
      • <h:inputText id=&quot;name&quot; required=&quot;true&quot; value=&quot;#{bike.name}&quot;>
      • <s:validate/>
      • </h:inputText>
        • Validación de todos los campos
      • <s:validateAll>
      • Username: <h:inputText value=&quot;#{user.username}&quot; required=&quot;true&quot;/>
      • Real Name: <h:inputText value=&quot;#{user.name}&quot; required=&quot;true&quot;/>
      • Password: <h:inputSecret value=&quot;#{user.password}&quot; required=&quot;true&quot;/>
      • </s:validateAll>
      Validación de campos No olvidarse del required=”true”
    31. Validación de campos
      • Validación de cada campo usando AJAX
        • Ajax4JSF se integra por completo con el ciclo de vida de los request de JSF
        • Ejemplo cuando un campo pierde foco
      • <s:validateAll>
      • <h:inputText id=&quot;bikename&quot;
      • required=&quot;true&quot;
      • value=&quot;#{bike.name}&quot;>
      • <a:support event=&quot;onblur&quot; reRender=&quot;bikename&quot;/>
      • </h:inputText>
      • </s:validateAll>
        • Tener cuidado con los eventos (presionar tab todo el tiempo)
      • Introducción a Seam
      • Introducción a EJB3
      • Introducción a JSF
      • Validaciones
      • Componentes
      • Contextos
      • Seguridad
      • Eventos e Interceptores
    32. Componentes de JBoss Seam
      • Tipos
      • Intercepción
      • Utilización
    33. Tipos de componentes
      • Componentes JavaBeans
      • EJB 3.0
          • Stateless Session Beans
          • Stateful Session Beans
          • Entity Beans
          • Message-Driven Beans
      • Son POJOs , cualquier clase puede ser un componente
    34. Tipos de componentes
      • Componentes JavaBeans
        • Pueden ser utilizados en lugar de EJBs
        • Contexto Seam: por defecto son puestos al contexto event
        • Request concurrentes a JBs en contexto de sesión son serializados
    35. Tipos de componentes
      • Componentes JavaBeans
        • Desventajas comparado con EJBs
          • No hay demarcación de transacción declarativa
          • No hay seguridad declarativa
          • Replicación de estado en cluster no eficiente
          • No se puede definir timeouts a nivel de método
          • No usa persistencia EJB 3.0
    36. Tipos de componentes
      • Componentes Stateless Session Bean
        • Imposibilidad de mantener el estado a través de varias invocaciones
        • Útil para JSF action listeners
        • Siempre en el contexto stateless
    37. Tipos de componentes
      • Componentes Stateful Session Bean
        • Mantiene el estado a través de múltiples invocaciones/múltiples requests
        • Contexto Seam : por defecto son puestos en el contexto de la conversación
        • No es posible utilizarlos en el contexto Stateless
        • Ejemplo de instanciación
          • @In(create=true)
          • Object myComponent = Component.getInstance(&quot;componentName&quot;);
    38. Tipos de componentes
      • Componentes Entity Beans
        • No pueden ser asignados a una variable de contexto
        • No soportan bijection (inyección/eyección) o demarcación de contexto
        • Óptimos como backing beans
        • Asignados al contexto de conversación por defecto
    39. Componentes de JBoss Seam
      • Tipos
      • Intercepción
      • Utilización
    40. Intercepción de componentes
      • Intercepción
        • La funcionalidad de Seam está implantada a través de la intercepción de las invocaciones a componentes
        • Opciones de configuración
          • Para cada Bean
          • Global para todos los Beans
    41. Intercepción de componentes
      • Interceptor usando anotaciones
      • @Stateless
      • @Interceptors(SeamInterceptor.class)
      • public class LoginAction implements Login{
      • Session Beans , la mejor forma de definir interceptores
      • File: ejb-jar.xml
      • <interceptors>
      • <interceptor>
      • <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
      • </interceptor>
      • </interceptors>
      • <assembly-descriptor>
      • <interceptor-binding>
      • <ejb-name>*</ejb-name>
      • <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
      • </interceptor-binding>
      • </assembly-descriptor>
    42. Componentes de JBoss Seam
      • Tipos
      • Intercepción
      • Utilización
    43. Utilización de componentes
      • Definición de nombres
      • @Name(“com.jboss.myseam.LoginAction”)
      • @Stateless
      • public class LoginAction implements Login{
      • Se debe considerar el uso de nombres calificados
    44. Utilización de componentes
      • Nombres de componentes
        • Los nombres se usan también desde JSF:
      • <h:commandButton type=”submit” value=”LogIn”
      • action=”#{com.jboss.myseam.LoginAction.login}”/>
        • Usando un Factory como alias (definidos en components.xml):
      • <factory name=”loginAction” scope=”STATELESS”
      • value=”#{com.jboss.myseam.LoginAction.login}”/>
      • <h:commandButton type=”submit” value=”LogIn” action=”#{loginAction}”/>
    45. Utilización de componentes
      • Scopes (ámbito) y roles
        • Definición de los scopes de los componentes
          • Scopes definidos en org.jboss.seam.ScopeType
          • La anotación @Scope permite sobrescribir el valor por defecto
      • @Name(“User”)
      • @Entity
      • @Scope(SESSION)
      • public class User{
      • ....
      • }
    46. Utilización de componentes
      • Un componente puede tener más de una función en un sistema
        • Diferentes roles en diferentes contextos
        • Uso de las anotaciones @Role & @Roles
      • @Name(“User”)
      • @Entity
      • @Scope(CONVERSATION)
      • @Roles({@Role(name=”currentUser”, scope=SESSION),
      • @Role(name=”guestUser”, scope=EVENT)})
      • public class User{
      • . . .
      • }
    47. Utilización de componentes
      • Component Lifecycle and CallBacks
        • Soporta métodos del ciclo de vida de EJB 3.0 con Entity/Session Beans
        • También con componentes JavaBeans!
          • @PostConstruct & @PreDestroy definidos por Seam
          • @Create
          • @Destroy
          • @Remove (solo SFSB)
          • @Startup
          • @Startup(depends={. . . })
    48. Utilización de componentes
      • Bijection
        • Inyección de componentes (@In)
          • Demarca una dependencia
        • Eyección de componentes hacia contextos (@Out)
      • @Name(“loginAction”)
      • @Stateless
      • public class LoginAction implements Login {
      • @In User user;
      • @Out Account account;
      • . . .
      • }
      • Introducción a Seam
      • Introducción a EJB3
      • Introducción a JSF
      • Validaciones
      • Componentes
      • Contextos
      • Seguridad
      • Eventos e Interceptores
    49. Contextos en Seam
      • Afecta a todos los componentes stateful de Seam
      • Es invocado independientemente del componente de la aplicación
      • Inspirado por Declarative Context Model
      • Agrega granularidad a alto nivel
      • Provee múltiples estados de contextos stateful
    50. Contextos en Seam
      • Acceso al contexto
        • Acceso declarativo a través de @In
      • @In private Context sessionContext
        • Los contextos pueden ser inyectados a un POJO :
          • Event Context
          • PageContext
          • ConversationContext
          • SessionContext
          • BusinessProcessContext
          • ApplicationContext
          • StatelessContext
    51. Contextos en Seam
      • Stateless Context
        • Los verdaderos componentes sin estado residen dentro del “ stateless context ”
        • Permite JavaBeans en estado stateless
      • @Stateless
      • @Name(“sessionExample”)
      • @Scope(ScopeType.STATELESS)
      • public class SessionExample{
      • @Out(scope= ScopeType.SESSION, required=true)
      • private String userName;
      • public String login(){
      • userName= “Joseph
      • return “/pageOne.jsp”'
      • }
      • }
    52. Contextos en Seam
      • Event Context
        • Excelente para llamadas cortas
        • El estado es mantenido a través del procesamiento de un solo request JSF
    53. Contextos en Seam
      • Page Context
        • Los componentes en este contexto están atadas a una página específica
        • El acceso de los componentes está acotado a todos los eventos emitidos desde la página
    54. Contextos en Seam
      • Conversation Context
        • Es un contexto extendido más chico que una sesión de usuario
        • El usuario puede simular varias mini sesiones sin necesidad de tenerlas realmente
        • Permite transaccionar con tiempos de ejecución largos
        • Se crean y se destruyen manualmente
    55. Contextos en Seam
      • Business Context
        • Mantiene componentes stateful asociados a procesos de negocios de ejecución prolongada a través de un BPM
        • Estos se acceden de manera similar que componente en otro contexto
      • @Stateless
      • @Name(“shoppingExample”)
      • @Scope(ScopeType.STATELESS)
      • public class Shopping {
      • @In(scope=ScopeType.BUSINESS_PROCESS)
      • private Ticket ticket;
      • }
    56. Contextos en Seam
      • Application Context
        • Similar a la especificación de los Servlets
        • La anotación “@Synchronized” permite la llamada concurrente a SFSB
      • @Name(“configurationData”)
      • @Scope(ScopeType.APPLICATION)
      • public class ConfigurationData implements Serializable{
      • //contents here please
      • }
    57. Contextos en Seam
      • Session context
        • Mantiene el estado asociado con la sesión de un usuario logueado
        • Permite JavaBeans en forma de stateful
      • @Name(“statelessHelloSeamWorld”)
      • @Scope(ScopeType.SESSION)
      • public class StatelessHelloSeamWorld{
      • @RequestParameter(“name”)
      • String userName;
      • public String getText() {
      • return HelloSeamWorld!!! - + username
      • }
      • }
    58. Contextos en Seam
      • La asignación de contexto por defecto depende del tipo de Bean
          • Stateless Session Beans
            • Stateless context es el único posible
          • Entities
            • Por defecto en Conversation context
          • Message-Driven Beans
            • Ningún contexto por defecto
          • Stateful Session Beans
            • Por defecto en Conversation context
          • JavaBeans
            • Por defecto en Event context
      • Introducción a Seam
      • Introducción a EJB3
      • Introducción a JSF
      • Validaciones
      • Componentes
      • Contextos
      • Seguridad
      • Eventos e Interceptores
    59. Seguridad
      • Modo simple
          • Usando un esquema “usuario/roles”
          • Las restricciones se aplican según el rol del usuario
      • Modo avanzado
          • Chequeo de permisos complejos
            • Verificación de combinaciones user/role , permiso y entidad
            • Ejemplo: ¿puede el usuario modificar la bicicleta con Id 3?
          • Usa del motor JBoss Rules para definir permisos
    60. Seguridad
      • Configuración
        • Pasos requeridos
          • Instalar el componente de identidad
          • Crear una clase de autenticación
          • Crear un formulario de login
    61. Seguridad
      • Instalación del componente de identidad
      • File: pages.xml
      • <security:identity authenticate-method=&quot;#{authenticator.authenticate}&quot;/>
    62. Seguridad
      • Componente de autenticación
      • @Name(&quot;authenticator&quot;)
      • public class Authenticator implements Serializable{
      • @In Identity identity;
      • public boolean authenticate() {
      • return identity.getUsername().equals( identity.getPassword() );
      • }
      • }
    63. Seguridad
      • Formulario de Login
        • El componente 'identity' de Seam tiene la funcionalidad básica
      • <h:form>
      • <h:panelGrid columns=”2”>
      • <h:outputLabel for=&quot;name&quot; value=&quot;Username&quot;/>
      • <h:inputText id=&quot;name&quot; value=&quot;#{identity.username}&quot;/>
      • <h:outputLabel for=&quot;password&quot; value=&quot;Password&quot;/>
      • <h:inputSecret id=&quot;password&quot; value=&quot;#{identity.password}&quot;/>
      • <h:commandButton value=&quot;Login&quot; action=&quot;#{identity.login}&quot;/>
      • </h:panelGrid>
      • </h:form>
    64. Seguridad
      • Excepciones de seguridad
        • NotLoggedInException
          • Método o página están restringidos a usuarios identificados
        • AuthorizationException
          • El usuario está logueado
          • Carece de los privilegios necesarios
        • Es preciso configurar una página de manejo normal de excepciones
    65. Seguridad
      • Manejo de excepciones de seguridad
      • File: pages.xml
      • <exception class=&quot;org.jboss.seam.security.NotLoggedInException&quot;>
      • <redirect view-id=&quot;/login.xhtml&quot;>
      • <message>You must be logged in to perform this action</message>
      • </redirect>
      • </exception>
      • <exception class=&quot;org.jboss.seam.security.AuthorizationException&quot;>
      • <end-conversation/>
      • <redirect view-id=&quot;/security_error.xhtml&quot;>
      • <message>You do not have the necessary security privileges to perform this
      • action.</message
      • </redirect>
      • </exception>
    66. Seguridad
      • Redireccionar al usuario después de realizar el login
        • NotLoggedInException
          • Lo redirecciona a login.xhtml
          • Después de login , envía al usuario nuevamente a la página original
      • File:component.xml
      • <event type=&quot;org.jboss.seam.notLoggedIn&quot;>
      • <action expression=&quot;#{redirect.captureCurrentView}&quot;/>
      • </event>
      • <event type=&quot;org.jboss.seam.postAuthenticate&quot;>
      • <action expression=&quot;#{redirect.returnToCapturedView}&quot;/>
      • </event>
    67. Seguridad
      • Aplicando seguridad a las páginas
      • File: pages.xml
      • <page view-id=&quot;/members/*&quot; login-required=&quot;true&quot;/>
      • <page view-id=&quot;/reports.xhtml&quot;>
      • <restrict>#{s:hasRole('admin')}</restrict>
      • </page>
    68. Seguridad
      • Aplicando seguridad a partes de una página
        • Atributo Rendered
          • Disponible en la mayoría de los tags
          • Renderiza el contenido si la expresión es verdadera
      • <h:outputLink action=&quot;#{reports.listManagerReports}&quot;
      • rendered=&quot;#{s:hasRole('manager')}&quot;>
      • Manager Reports
      • </h:outputLink>
      • <s:fragment rendered=&quot;#{s:hasRole('admin')}&quot;>
      • <div>
      • ...
      • </div>
      • </s:fragment>
    69. Seguridad
      • Aplicando seguridad a los métodos con la anotación @Restrict
      • @Name(&quot;account&quot;)
      • public class AccountAction {
      • @Restrict(&quot;#{s:hasRole('admin')}&quot;)
      • public void delete() {
      • ...
      • Introducción a Seam
      • Introducción a EJB3
      • Introducción a JSF
      • Validaciones
      • Componentes
      • Contextos
      • Seguridad
      • Eventos e Interceptores
      • Modelo de eventos
      • Eventos definidos por Seam
      • Interceptores de Seam
      Eventos e Interceptores
    70. Modelo de eventos
      • Modelo de eventos JSF
        • Los eventos son mapeados a 'observadores' de manera declarativa
      • Configuración con anotaciones e implementación con interceptores
      • Eventos de Seam (patrón observer )
        • De una acción de página
        • Generado por un componente
        • Contextual
      • Eventos e Interceptores
      • Modelo de eventos
      • Eventos definidos por Seam
      • Interceptores de Seam
    71. Eventos definidos por Seam
      • Tipos de eventos definidos por Seam
        • Page action event: sucede justo antes de que una página sea renderizada
        • Puede ser definida para un view id de JSF
      • File: WEB-INF/pages.xml
      • <pages>
      • <page view-id=&quot;/hello.jsp&quot; action=&quot;#{helloWorld.sayHello}&quot;/>
      • </pages>
        • Se puede usar con patrones para especificar una acción para múltiples vistas
      • File: WEB-INF/pages.xml
      • <pages>
      • <page view-id=&quot;/hello/*&quot; action=&quot;#{helloWorld.sayHello}&quot;/>
      • </pages>
    72. Eventos definidos por Seam
      • Tipos de eventos basados en componentes
        • Mantienen bajo acoplamiento al interactuar indirectamente con otros componentes
        • Se utiliza un patrón Observador/Observable
        • Cuando un evento sucede, las acciones registradas son llamadas en el orden en que aparecen
      • File: components.xml
      • <components>
      • <event type=&quot;hello&quot;>
      • <action execute=&quot;#{helloListener.sayHelloBack}&quot;/>
      • <action execute=&quot;#{logger.logHello}&quot;/>
      • </event>
      • </components>
    73. Eventos definidos por Seam
      • Tipos de eventos basados en componentes
        • Seam provee un mecanismo propio para que los componentes generen eventos
      • @Name(&quot;helloWorld&quot;)
      • public class HelloWorld {
      • public void sayHello() {
      • FacesMessages.instance().add(&quot;Hello World!&quot;);
      • Events.instance().raiseEvent(&quot;hello&quot;);
      • }
      • }
      • O...
    74. Eventos definidos por Seam
      • Tipos de eventos basados en componentes
        • .... con una anotación
      • @Name(&quot;helloWorld&quot;)
      • public class HelloWorld {
      • @RaiseEvent(&quot;hello&quot;)
      • public void sayHello() {
      • FacesMessages.instance().add(&quot;Hello World!&quot;);
      • }
      • }
    75. Eventos definidos por Seam
      • Tipos de eventos basados en componentes
        • Los observadores se pueden definir usando anotaciones
      • @Name(&quot;helloListener&quot;)
      • public class HelloListener {
      • @Observer(&quot;hello&quot;)
      • public void sayHelloBack() {
      • FacesMessages.instance().add(&quot;Hello to you too!&quot;);
      • }
      • }
    76. Eventos definidos por Seam
      • Eventos contextuales en Seam
        • Existen muchos provistos para ser usados por la aplicación en tareas que requieran una integración especial con el framework
        • Los componentes pueden observar estos eventos como lo harían con uno propio
      • validationFailed — called when JSF validation fails
      • noConversation — called when there is no long running conversation and a long
      • running conversation is required
      • preSetVariable.<name> — called when the context variable <name> is set
      • postSetVariable.<name> — called when the context variable <name> is set
      • preRemoveVariable.<name> — called when the context variable <name> is unset
      • ...
    77. Eventos definidos por Seam
      • Eventos contextuales en Seam
      • ...
      • startTask.<name> — called when the task <name> is started
      • endTask.<name> — called when the task <name> is ended
      • postCreate.<name> — called when the component <name> is created
      • preDestroy.<name> — called when the component <name> is destroyed
      • beforePhase — called before the start of a JSF phase
      • afterPhase — called after the end of a JSF phase
      • postInitialization — called when Seam has initialized and started up all
      • components
      • postAuthenticate.<name> — called after a user is authenticated
      • preAuthenticate.<name> — called before attempting to authenticate a user
      • ...
      • Eventos e Interceptores
      • Modelo de eventos
      • Eventos definidos por Seam
      • Interceptores de Seam
    78. Interceptores de Seam
      • EJB 3.0 define el modelo de interceptores estándar para los Session Beans
        • @AroundInvoke
        • Anotación @Interceptor
      • public class LoggedInInterceptor {
      • @AroundInvoke
      • public Object checkLoggedIn(InvocationContext invocation) throws Exception {
      • boolean isLoggedIn = Contexts.getSessionContext().get(&quot;loggedIn&quot;)!=null;
      • if (isLoggedIn) {
      • //the user is already logged in
      • return invocation.proceed();
      • }else { //the user is not logged in, fwd to login page
      • return &quot;login&quot;;
      • }
      • }
      • }
    79. Interceptores de Seam
      • Mejoras de Seam
        • @Interceptors es una anotación para definir interceptores
        • Puede ser utilizada con anotaciones propias
      • @Target(TYPE)
      • @Retention(RUNTIME)
      • @Interceptors(LoggedInInterceptor.class)
      • public @interface LoggedIn {}
    80. Interceptores de Seam
      • Mejoras de Seam
        • Ahora podemos proveer de una anotación a nuestro action listener, al que se le aplicará el interceptor
      • @Stateless
      • @Name(&quot;changePasswordAction&quot;)
      • @LoggedIn
      • public class ChangePasswordAction implements ChangePassword {
      • ...
      • public String changePassword() { ... }
      • ...
      • }
    81. Interceptores de Seam
      • Mejoras de Seam
        • El orden relativo a otro interceptores es opcional
        • La implementación del interceptor usa la misma lógica que en EJB 3.0
      • @Interceptor(around={BijectionInterceptor.class,
      • ValidationInterceptor.class,
      • ConversationInterceptor.class},
      • within=RemoveInterceptor.class)
      • public class LoggedInInterceptor {
      • ...
      • }
      • Introducción a Seam
      • Introducción a EJB3
      • Introducción a JSF
      • Validaciones
      • Componentes
      • Contextos
      • Seguridad
      • Eventos e Interceptores
      Resumen
        • ¿Preguntas?
        • ¿Consultas?
        • ¿Sugerencias?
      • ¡Muchas Gracias!
      • Sebastian Javier Marchano

    + sebasjmsebasjm, 1 month ago

    custom

    329 views, 3 favs, 2 embeds more stats

    Presentación de la charla del día 21 de Octubre e more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 329
      • 303 on SlideShare
      • 26 from embeds
    • Comments 0
    • Favorites 3
    • Downloads 0
    Most viewed embeds
    • 23 views on http://sebasjm.wordpress.com
    • 3 views on http://static.slideshare.net

    more

    All embeds
    • 23 views on http://sebasjm.wordpress.com
    • 3 views on http://static.slideshare.net

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories