No hace mucho desde el momento de escribir esta entrada empezé a pelearme con los EJB's. Para esto el buen Gus me mostró como hacer una poderosa Calculadora que exponía un método remoto suma, el cual, después de ser montado en Weblogic Server 8.1, podía ser invocado en un cliente Java remoto mediante los stubs del EJB y el contexto inicial de Weblogic proporcionado por BEA.
Cuando quize repetir el experimento en Geronimo 2.0 para conocer la especificacion EJB3, segui un procedimiento semejante para montar un EJB Calculadora en éste application server.
Genere un proyecto EAR en eclipse y un EJB Module asociado al EAR
Posteriormente definí la interfaces remota y local que exponen el método suma
package test.ejb3;
import javax.ejb.Remote;
@Remote
public interface CalculadoraRemote {
int suma(int a,int b);
}
package test.ejb3;
import javax.ejb.Local;
@Local
public interface CalculadoraLocal {
int suma(int a,int b);
}
Escribí un POJO que definía la implementacion del metodo con las Anotaciones Java adecuadas para el EJB, en este caso @Stateless para indicar que es un EJB de sesion sin estado.
package test.ejb3;
import javax.ejb.Stateless;
@Stateless(name="Calculadora")
public class CalculadoraBean implements CalculadoraLocal,CalculadoraRemote{
@Override
public int suma(int a, int b) {
return a+b;
}
}
Una vez hecho esto simplemente generé el EAR con el EJB, el cual pude montar sin problemas sobre el Geronimo.
Lo siguiente era hacer un cliente Java para probar el EJB. Al igual que el cliente utilizado para el EJB sobre weblogic, lo primero es construir el contexto JNDI inical, pero en este caso tendría que hacerse con un contexto de Open EJB, el cual es el proveedor de servicios EJB utilizado por gerónimo.
Una vez obtenido el contexto JNDI lo siguiente era obtener una referencia remota de la interfaz del EJB mediante su nombre JNDI asociado al EJB, es aqui donde empezaron los problemas debido a que el manejo de nombre JNDI mostrados la documentación es un poco extraña. De hecho después de mucho buscar en google, hacer pruebas y decir muchas maldiciones llegué a lo siguiente.
Para obtener la referencia remota se especifica el nombre JNDI de la siguiente forma
archivo_EJBJar.jar/ejbName/fullQualifiedName_interfaceRemote
Donde archivo_EJBJar.jar Es el nombre del archivo de modulo EJB dentro del EAR (lo que se me hizo una mamada).
ejbName Es el nombre asociado al EJB, este se puede definir en la anotacion @Stateless con el atributo name, o bien en el archivo ejb-jar.xml y openejb-jar.xml para el caso de la especificación 2.0 y anteriores de EJB.
fullQualifiedName_interfaceRemote Que es el nombre de la interface remota, incluyendo los paquetes.
Con lo que el cliente Java quedó de la siguiente manera, utilizando una clase de prueba de JUnit 4.0.
package test.test.ejb3;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.junit.Before;
import org.junit.Test;
import test.ejb3.CalculadoraRemote;
public class CalculadoraTest {
private InitialContext context;
@Before
public void setUp() throws Exception {
Properties properties = new Properties();
properties.put("java.naming.factory.initial",
"org.openejb.client.RemoteInitialContextFactory");
properties.put("java.naming.provider.url", "127.0.0.1:4201");
context = new InitialContext(properties);
}
@Test
public void testSuma() {
try {
Object calculadora = context.lookup(
"CalculadoraEJB3.jar/Calculadora/test.ejb3.CalculadoraRemote");
assertNotNull(calculadora);
assertTrue(calculadora instanceof CalculadoraRemote);
CalculadoraRemote calculadoraRemote = (CalculadoraRemote) calculadora;
assertEquals(5, calculadoraRemote.suma(2, 3));
} catch (NamingException e) {
e.printStackTrace();
fail(e.getMessage());
}
}
}
Algo curioso que me pasó es que cuando intenté realizar esto sin incluir al módulo EJB dentro del EAR, el formato del nombre anteriormente señalado no funcionó, quizá por que se requiera un formato diferente para el nombre JNDI, el dato no lo he encontrado, pero al menos será posible invocar al EJB remotamente con el procedimiento anterior.
¿Por que hacer este blog en vez de hechar la hueva?
La intención de este blog es compartir con la comunidad algunos problemas con los que me he topado cuando me ha tocado realizar algún proyecto o alguna misión especial asi como la forma en que lo solucioné. Asi mismo me gustaría compartir la preferencia que tengo por el Metal y la música oscura y uno que otro tema que mis colaboradores(as) quieran aportar
sábado, 8 de diciembre de 2007
viernes, 7 de diciembre de 2007
Bienvenida
Que tranza gente:
Pues bien, yo soy Ricardo y pues de lo que les puedo decir es que soy solo un simple mortal que sabe un poco de computadoras y que le gusta la música metalera (BLACK FUCKIN METAL!!!!!!!! 1) y oscura en general.
Les puedo decir que tenía la idea ya de crear un blog, pero hasta ahora me animé a hacerlo. Mi idea es compartir las pocas o muchas experiencias que he tenido cuando me he visto involucrado en desarrollar algún proyecto, ya sea para las materias de la escuela o para las misiones que me encargan del trabajo.
De los temas de computación a los que me enfocaré que tengo en la mente en este momento son:
Por otro lado me gustaría incluir información de interés general, por lo que he invitado a algunas amistades a colaborar en esta idea.
Espero salga algo provechoso de todo esto
Ricardo
Que la chela sea
In blood we lust
In beer we lust
More Fuckin metal and more fuckin beer
1 Frase tomada de: http://www.xibalbaitzaes.com/
Pues bien, yo soy Ricardo y pues de lo que les puedo decir es que soy solo un simple mortal que sabe un poco de computadoras y que le gusta la música metalera (BLACK FUCKIN METAL!!!!!!!! 1) y oscura en general.
Les puedo decir que tenía la idea ya de crear un blog, pero hasta ahora me animé a hacerlo. Mi idea es compartir las pocas o muchas experiencias que he tenido cuando me he visto involucrado en desarrollar algún proyecto, ya sea para las materias de la escuela o para las misiones que me encargan del trabajo.
De los temas de computación a los que me enfocaré que tengo en la mente en este momento son:
- Programación en Java
- Bases de datos (DB2, PostgreSQL)
- IDOL de Autonomy
- Weblogic Server y Aqualogic Service Bus
- Apache Geronimo
- etc
Por otro lado me gustaría incluir información de interés general, por lo que he invitado a algunas amistades a colaborar en esta idea.
Espero salga algo provechoso de todo esto
Ricardo
Que la chela sea
In blood we lust
In beer we lust
More Fuckin metal and more fuckin beer
1 Frase tomada de: http://www.xibalbaitzaes.com/
Suscribirse a:
Comentarios (Atom)