Mostrando entradas con la etiqueta interceptor. Mostrar todas las entradas
Mostrando entradas con la etiqueta interceptor. 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

Ejercicios de clase. Clase 11: implementando un Interceptor

Un Interceptor es una clase especial que dispone de un método que es ejecutado cuando se  invoca un método de un EJB, bien porque el método invocado está anotado específicamente para ser interceptado o bien porque la clase entera está anotada para ser interceptada, de manera, que este hecho afectará a todos sus métodos. En resumen, los Interceptors permien hacer procesamientos anteriores y posteriores a la ejecución de un método de un EJB.

Clase correspondiente a un Interceptor. El método tiene que ser anotado con @AroundInvoke y debe respetar la signatura mostrada en la figura, aunque su nombre es indiferente. El parámetro context encapsula todos los metadatos correspondientes a la clase y el método interferidos. Así, en este ejemplo, se emplea el parámetro de tipo InvocationContext para imprimir el nombre del método interferido. El método proceed() permite ejecutar el método interferido, por lo que todo el código anterior corresponde a preprocesamiento y el posterior a postprocesamiento.

Puedes descargar el código de InterceptorSimple aquí
Puedes acceder a la API de la clase InvocationContext aquí


Por su parte, el componente intercepado, tiene que ser anotado con @Interceptors para indicar qué clases de tipo Interceptor tiene asociadas
Esta es la salida generada por el interceptor de ejemplo en la consola del servidor GlassFish cuando es interceptado el método onMessage() del EJB NewMessage.