Mostrando entradas con la etiqueta interceptor binding. Mostrar todas las entradas
Mostrando entradas con la etiqueta interceptor binding. Mostrar todas las entradas

jueves, 13 de junio de 2013

Ejercicios de clase. Clase 12: ejemplo de definición y uso de un Interceptor Binding

Los Interceptor Bindings son un mecanismo que nos permite aplicar clases Interceptor a los métodos de los beans de un proyecto web, tal y como hemos visto para los EJB. Cuando creamos un tipo Interceptor Binding, su nombre genera una nueva anotación del tipo @nombreDelInterceptorBinding que será aplicada tanto a la clase Interceptor como a la clase del bean interferido, vinculándolas. De esta manera, el Interceptor podrá hacer pre y post procesamiento a los métodos del bean siguiendo el paradigma de la programación orientada a aspectos. 

 

1. Con el asistente de NetBeans podemos crear rápidamente un nuevo tipo Interceptor Binding

2. El la definición del tipo vamos a encontrarnos con la anotación @InterceptorBinding
3. Debemos añadir la anotación con nuestro nombre del Interceptor Binding a la clase Interceptor. En el ejemplo, como el Interceptor Binding se llama LogginIterceptorBinding, la anotación será @LogginIterceptorBinding.
4. Al igual que el punto anterior, hay que anotar con @LogginIterceptorBinding la clase del bean cuyos métodos van a ser interceptados por la clase Interceptor (LogginInterceptor)
5. En el archivo de configuración beans.xml debemos declarar los interceptores que vayamos a desplegar en el servidor.
6. Al ejecutar la aplicación e invocar a uno de los métodos del bean vemos cómo efectivamente el interceptor ha conseguido escribir información antes y después de su ejecución en la  consola del servidor GlassFish

miércoles, 12 de junio de 2013

Ejercicios de clase. Clase 11: ejemplo de CDI, qualifiers e interceptor binding.

Saludo formal empleando inyección de dependencias

Saludo informal empleando un qualifier

 

Crea una aplicación web JSF que disponga de un sencillo formulario con un cuadro de texto (inputText) donde el usuario pueda escribir su nombre, un botón (commandButton) para enviar el formulario etiquetado como "Salúdame" y un cuadro de salida (outputText) para mostrar un saludo. Al pulsar el botón se invocará a un método de un bean que mostrará la salida en el outputText del formulario, consistente en un saludo al usuario de la forma ¡Hola, <nombreUsuario>! El bean tendrá dos propiedades: el nombre de usuario de tipo String y el saludo, que no será de tipo String, sino que pertenecerá a una clase Saludo con un método String getSaludo(String nombreUsuario) para obtener el String del saludo.

 

Descarga de la solución a los apartados 1 y 2 (proyecto NetBeans para GlassFish) 

Descarga de la solución a los apartados 3 y 4 (proyecto NetBeans para GlassFish)

 

  1.  Esta instancia de la clase Saludo ha de ser inyectada mediante CDI en el bean.
    Tanto el bean como la clase Saludo están anotadas con @Named. Por otra parte, la declaración de la referencia a la instancia de la clase Saludo es anotada con @Inject

  2. Crea un clase derivada de Saludo, SaludoInformal, que sobreescriba el método getSaludo() cambiando el saludo que devuelve por ¡Ey, <nombreUsuario>! Crea un qualifier @Informal para que pueda ser injectada la clase derivada en lugar de la clase base en el campo del bean.
    Creando un qualifier "Informal" asociado a la clase derivada de Saludo, SaludoInformal, podemos anotar la referencia original con @Informal para indicar que se quiere inyectar una instancia de la clase derivada (SaludoInformal) a pesar de tratarse de una declaración de atributo del tipo Saludo (la clase base)

  3. Crea un Interceptor Binding que cada vez que se llame a getSaludo() escriba a la entrada al método "Llamando a <método> con argumento <nombreUsuario>" y que escriba a la salida "Saliendo de <método> con valor de retorno <saludo>"

  4. Crea un estereotipo que permita sustituir el uso de las anotaciones @Named y
    @RequestScoped por una única anotación. Aplica el estereotipo a las clases Saludo y SaludoInformal.