lunes, 13 de junio de 2011

Métodos CallBack para Session Beans

Para este ejemplo estoy usando Netbeans 6.9, Ubuntu 10.04 y Glassfish V3

Los métodos callback son similares a usar triggers de una base de datos, es decir son ejecutados cuando se ejecuta alguna acción sobre el objeto, estas acciones pueden ser instanciación(constructor), eliminación(destructor), desactivar(stateful beans) o activar(stateful beans)

Para ejemplificar lo que hacen estos métodos, vamos a crear un Enterprise Project llamado CallbackSesion.


Luego de esto, vamos a crear un EJB de session del tipo stateless con interface remota llamado EJBStateless en el paquete com.ejemplo.stateless.


Tambien vamos a crear un session bean del tipo Stateful con interface remota llamado EJBStateful en el paquete com.ejemplo.stateful.


Para EJBStateless agregamos las funciones creacionObjeto y eliminarObjeto, con el siguiente código:

package com.ejemplo.stateless;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Remove;
import javax.ejb.Stateless;

@Stateless
public class EJBStateless implements EJBStatelessRemote {

@PostConstruct
public void creacionObjeto() {
System.err.println("Se esta creando el objeto Stateless");
}

public void mostrarMensaje() {
System.out.println("Este es un EJB de session de tipo Stateless");
}

@Remove
public void eliminarObjeto() {
System.out.println("..........Se esta ejecutando funcion para eliminar el objeto Stateless");
}

@PreDestroy
public void mensajePreDestroy() {
System.err.println(".......Etapa de Pre Destroy Stateless");
}
}




Para EJBStateful agregamos las funciones creacionObjeto y eliminarObjeto, con el siguiente código:
package com.ejemplo.stateful;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Remove;
import javax.ejb.Stateful;

@Stateful
public class EJBStateful implements EJBStatefulRemote {

@PostConstruct
public void creacionObjeto() {
System.err.println("Se esta creando el objeto Stateful");
}


public void mostrarMensaje() {
System.out.println("Este es un EJB de session de tipo Stateful");
}

@Remove
public void eliminarObjeto() {
System.out.println("Se esta ejecutando funcion para eliminar el objeto Stateful");
}

@PreDestroy
public void mensajePreDestroy() {
System.err.println("Etapa de Pre Destroy Stateful");
}

}
Tenemos que destacar que en el código antes escrito se usan las anotaciones @PostConstruct y @PreDestroy, estas sirven para señalar que funciones se ejecutarán. También la anotación @Remove, que es la que nos permitirá indicar la función que será la encargada de eliminar el objeto.


Hecho esto, vamos a realizar una inyección de EJB en la clase Main, de nuestro cliente.
Es decir:

package callbacksesion;

import com.ejemplo.stateful.EJBStatefulRemote;
import com.ejemplo.stateless.EJBStatelessRemote;
import javax.ejb.EJB;


public class Main {
@EJB private static EJBStatefulRemote stateful;
@EJB private static EJBStatelessRemote stateless;

public static void main(String[] args) {
stateless.mostrarMensaje();
stateful.mostrarMensaje();
stateful.eliminarObjeto();
stateless.eliminarObjeto();
}

}
Con lo que tenemos la siguiente salida:


y al detener el servidor:

No hay comentarios:

Publicar un comentario