lunes, 13 de junio de 2011

Métodos Callback de Interceptores

Para este ejemplo estoy usando Ubuntu 10.04, Netbeans 6.9 y Glassfish V3.
En un post anterior usamos Interceptores con métodos de negocio. Para este post vamos a usar metodos callback en interceptores.
Tenemos cuatro tipos de anotaciones callback:
- PostConstruct(Stateless, Stateful y MDB)
- PreDestroy(Stateless, Stateful y MDB)
- PostActivate(Stateful)
- PrePassivate(Stateful)



Primeramente creamos un Enterprise Project llamado CallbackInterceptors.

Luego creamos un EJB del tipo Stateless con interface remota llamado Utilitario, dentro del paquete com.ejemplo.



Ahi creamos una función llamada mostrarMensaje que imprima en pantalla un saludo:



package com.ejemplo;

import javax.ejb.Stateless;

@Stateless
public class Utilitario implements UtilitarioRemote {

public void mostrarMensaje() {
System.out.println("Saludos desde el EJB");
}
}


Luego de eso creamos una clase interceptora llamada: ClaseInterceptoraLifeCycle en el paquete: com.ejemplo.interceptores. La cual va a tener las funciones:
mensajePostConstruct(InvocationContext inv) con la anotación: @PostConstructque será llamada luego de ejecutarse la inyección de EJB y la función mensajePreDestroy(InvocationContext inv) con la anotación:@PreDestroy que será llamda luego de ser eleiminado el objeto.
Es decir:

package com.ejemplo.interceptores;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.interceptor.InvocationContext;

public class ClaseInterceptoraLifeCycle {

@PostConstruct
public void mensajePostConstruct(InvocationContext inv){
System.out.println("Test PostConstruct");
}


@PreDestroy
public void mensajePreDestroy(InvocationContext inv){
System.out.println("Test PreDestroy");
}
}

Hecho esto, tenemos que modificar la clase Stateless EJB, para que soporte el Interceptor creado, para eso agregamos la anotación:@Interceptors({
com.ejemplo.interceptores.ClaseInterceptoraLifeCycle.class
})
Con lo que el código nos queda como:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package com.ejemplo;

import javax.ejb.Stateless;
import javax.interceptor.Interceptors;

/**
*
* @author santiago
*/
@Stateless
@Interceptors({
com.ejemplo.interceptores.ClaseInterceptoraLifeCycle.class
})
public class Utilitario implements UtilitarioRemote {

public void mostrarMensaje() {
System.out.println("Saludos desde el EJB");
}
}

Finalmente en la clase Main, hacemos la inyección de EJB a Utilitario


y obtenemos el siguiente resultado:



y si detenemos el servidor:


No hay comentarios:

Publicar un comentario