Mostrando entradas con la etiqueta EJB3. Mostrar todas las entradas
Mostrando entradas con la etiqueta EJB3. Mostrar todas las entradas

lunes, 3 de mayo de 2010

Uso de env-entry de EJB 3.0

Uso de env-entry de EJB 3.0

Con este ejercicio se muestra el uso de la inyeccion de una cadena desde el XML de EJB 3.0. Desde el XML se inyecta la cadena Dracof a la propiedad nombreCliente del EJB Stateless.

Primero se define la clase SaludoBean como un Stateless con nombre InyeccionSaludoBean y JNDI ejb/InyeccionSaludoBean.


@Stateless(name="InyeccionSaludoBean", mappedName="ejb/InyeccionSaludoBean")
public class SaludoBean implements Saludo {

@Resource(name="nombreCliente")
private String nombreCliente;

@Override
public void imprimeSaludo() {
if (nombreCliente == null) {
System.out.println("El nombreCliente es NULL");
} else {
System.out.println("El nombreCliente NO! es NULL");
}
System.out.println("Dentro del metodo imprimeSaludo " + nombreCliente);
}
}

Se observa que el EJB define la propiedad nombreCliente el cual se le inyectara el recurso con nombre nombreCliente.

El recurso nombreCliente sera definido en el XML ejb-jar-xml como sigue

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
<display-name>Inyeccion</display-name>

<enterprise-beans>
<session>
<ejb-name>InyeccionSaludoBean</ejb-name>
<env-entry>
<env-entry-name>nombreCliente</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>Dracof</env-entry-value>
</env-entry>
</session>
</enterprise-beans>
</ejb-jar>

Dentro del XML se define el nombre de la entrada de entorno (env-entry-name) su tipo (env-entry-type) y valor (env-entry-value).

Se crea un cliente para ejecutar el metodo imprimeSaludo() del Stateless.

Nota: Para este ejercicio el jar del EJB se deploya en un WebLogic 10
 
public static void main(String[] args) {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
props.put(Context.PROVIDER_URL, "t3://localhost:7030");

try{
Context context = new InitialContext(props);
Object obj = context.lookup("ejb.InyeccionSaludoBean#org.dracof.inyeccion.Saludo");
Saludo saludo = (Saludo) PortableRemoteObject.narrow(obj, Saludo.class);

saludo.imprimeSaludo();
} catch (Exception ex) {
ex.printStackTrace();
}
}


El nombreCliente NO! es NULL
Dentro del metodo imprimeSaludo Dracof

Suerte.

martes, 17 de noviembre de 2009

Primer Stateless EJB3 con Eclipse y Weblogic 10

Primer Stateless EJB3 con Eclipse y Weblogic 10

Crear un Bean de Session Sin Estado es muy simple usando las anotaciones de EJB3, a continuación un ejemplo que realiza las operaciones basicas de una calculadora

La estructura del proyecto es



La carpeta jar contiene el EJB generado para el despliegue, este jar es construido con ayuda de Eclipse, esto creando inicialmente el proyecto de tipo EJB como sigue



Y configurando la version a usar



Las librerias que se usan para este proyecto son

javaee.jar
wlclient.jar (para uso del cliente)

Cabe señalar que se usa Eclipse 3.5 y WebLogic 10.3.1.0

Creamos la inteface de negocio,

package org.dracof.ejb3.calculadora;

import javax.ejb.Remote;

@Remote
public interface Calculadora {

public int suma(int a, int b);

public int resta(int a, int b);

public float multiplicacion(int a, int b);

public float division(int a, int b);
}

Usando la anotacion @Remote indicamos que este EJB sera accesado remotamente, es decir, desde otra máquina virtual. Su implementacion

package org.dracof.ejb3.calculadora;

import javax.ejb.Stateless;

@Stateless (mappedName="ejb/calculadora" )
public class CalculadoraBean implements Calculadora {

public float division(int a, int b) {
if ( b!= 0 ) {
return a/b;
}
return -1;
}

public float multiplicacion(int a, int b) {
return a*b;
}

public int resta(int a, int b) {
return a-b;
}

public int suma(int a, int b) {
return a+b;
}
}

Con @Stateless se indica que sera un EJB de Session sin Estado, para este caso implementamos directamente la interface Calculadora, en caso de no querer hacerlo podemos hacer uso de la anotacion @Remote desde la clase como sigue

@Remote(Calculadora.class)
@Stateless (mappedName="ejb/calculadora")
public class CalculadoraBean {

}

Para Weblogic la propiedad mappedName de Stateless le indica el nombre del JNDI.

Dejamos el META-INF/MANIFEST.MF como lo genera Eclipse

Manifest-Version: 1.0
Class-Path:

Para generar el jar simplemente hacemos clic derecho sobre el nombre del proyecto y seleccionamos



Después seleccionar el tipo de export



Y finalmente seleccionamos el destino y nombre del EJB, para este caso se exporta en la carpeta jar del proyecto



Ahora entramos a la consola de Weblogic, en mi caso usando


http://localhost:7011/console/


Seleccionamos del panel izquierdo Deployments



Seleccionamos install de la pantalla desplegada



Desde upload your file(s)



Seleccionamos el jar recien creado del ejb



Oprimimos Next, Selecciomos la aplicación BasicoLocalStateless.jar



Oprimimos Next y seleccionamos que lo instale como una aplicacion



Oprimimos Next y dejamos la configuración por default



Oprimimos Finish, si todo esta correcto vemos una pantalla en la cual nos indica que el EJB esta Activo.



Para ver el JNDI de este EJB seleccionamos dentro de Domain Structure, la opcion Servers y del lado derecho el Server en el cual estamos trabajando



Con esto vemos la opcion ‘View JNDI Tree’, la seleccionamos y vemos una nueva ventana con el arbol JNDI



Vemos nuestro JNDI de Calculadora



Creamos el cliente desde eclipse

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;

public class ClienteCalculadora {

public static void main(String[] args) {
Properties prop = new Properties();
prop.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
prop.put(Context.PROVIDER_URL, "t3://localhost:7011/");
try {
InitialContext contexto = new InitialContext(prop);
Object obj = contexto.lookup("ejb.calculadora#org.dracof.ejb3.calculadora.Calculadora");

Calculadora calculadora = (Calculadora) PortableRemoteObject.narrow(obj, Calculadora.class);

int a = 10;
int b = 13;
int res = calculadora.suma(a, b);
System.out.println( "La suma de " + a + " + " + b + " es " + res);
} catch (NamingException e) {
e.printStackTrace();
}
}
}

Y al ejecutarlo vemos el resultado

La suma de 10 + 13 es 23

Como vemos, para este ejercicio ya no es necesario crear el xml ejb-jar.xml !!

Codigo Java

JAR EJB

Suerte.