Ejemplo EJB stateless
Lo prometido es deuda y ahora q se me ha pasado la vagancia y además tenía un ratillo libre (combinación compleja donde las halla)
os dejo un ejemplo de un ejb sin estado (stateless).
Yo he utilizado jboss en su última versión estable (4.2.2.GA) como contenedor del ejb, para utilizarlo solo teneis que descargaros una copia y arrancar ejecutando /bin/run.sh, ¿fácil verdad?. Podriamos haber utilizado glassfish, que en ubuntu se queda la instalación en un maravilloso apt-get install glassfish, pero si os parece eso lo dejamos para otro día.
Vamos con nuestro ejb.
Primero nos creamos el bean que encapsula toda nuestra lógica de negocio. En este caso tendremos solo 2 métodos, para sumar y restar 2 números (operaciones básicas de toda calculadora).
-
package net.jsanroman.ejb3stateless.ejb.stateless;
-
import javax.ejb.Stateless;
-
import net.jsanroman.ejb3stateless.ejb.interfaces.CalculadoraLocal;
-
import net.jsanroman.ejb3stateless.ejb.interfaces.CalculadoraRemote;
-
-
@Stateless
-
public class CalculadoraBean implements CalculadoraRemote, CalculadoraLocal
-
{
-
-
public int add( int x, int y ){return x+y;}
-
public int subtract (int x,int y){return x-y;}
-
}
Destacar el uso de la anotación @Stateless para indicar el tipo de ejb que estamos creando.
A continuación creamos las interfaces CalculadoraLocal y CalculadoraRemote para indicar que métodos serán accesibles desde el propio contenedor o desde fuera y que serán implementadas por nuestro bean anterior.
En nuestro caso solo nos interesa acceder desde remoto pues haremos las pruebas desde un script fuera de nuestro contenedor.
-
package net.jsanroman.ejb3stateless.ejb.interfaces;
-
import javax.ejb.Local;
-
@Local
-
public interface CalculadoraLocal {
-
}
-
package net.jsanroman.ejb3stateless.ejb.interfaces;
-
import javax.ejb.Remote;
-
public interface CalculadoraRemote {
-
public int add(int x, int y);
-
public int subtract( int x, int y);
-
}
Ya tenemos nuestro ejb creado, lo empaquetamos en un .jar (tareilla ant) y lo soltamos en jboss/server/default/deploy. Si nos fijamos en el log de jboss podremos averiguar si se ha producido algún error, pero para estar completamente seguros nos vamos a la jmx-console http://localhost:8080/jmx-console/ y comprobamos si se ha cargado nuestro ejb, en mi caso aparecen estas lineas que indican que está listo para ser utilizado:
# jar=ejb3_stateless_calculadora.jar,name=CalculadoraBean,service=EJB3
# module=ejb3_stateless_calculadora.jar,service=EJB3
Llegados a este punto tan solo nos queda desarrollar un sencillo cliente que haga uso del ejb recién creado. Con una simple clase que muestre el resultado por consola es suficiente para esta prueba:
-
package net.jsanroman.ejb3stateless.client;
-
import java.util.Properties;
-
import javax.naming.Context;
-
import javax.naming.InitialContext;
-
import javax.naming.NamingException;
-
import net.jsanroman.ejb3stateless.ejb.interfaces.CalculadoraRemote;
-
import net.jsanroman.ejb3stateless.ejb.stateless.CalculadoraBean;
-
public class CalculadoraClient {
-
properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
-
properties.put("java.naming.factory.url.pkgs","=org.jboss.naming:org.jnp.interfaces");
-
properties.put("java.naming.provider.url","localhost:1099");
-
Context contexto = null;
-
try{
-
CalculadoraRemote beanRemoto = (CalculadoraRemote)
-
contexto.lookup(CalculadoraBean.RemoteJNDIName);
-
int resultado = beanRemoto.add(1, 9);
-
}
-
{
-
e.printStackTrace();
-
}
-
}
-
}
Simplemente destacar la linea contexto.lookup(CalculadoraBean.RemoteJNDIName); causa de posibles rompederos de cabeza y que nos da acceso a nuestro ejb.
Ala y ahora a hacer pruebas con los diferentes ejb's, el ejb-ql, a probar desde otra máquina, y lo que se nos ocurra.

Como aventuraba en el anterior post de esta serie, esta semana hemos comenzado con 












