Documente Academic
Documente Profesional
Documente Cultură
MDB
En esta oportunidad tratare de explicar un poco el manejo de un MDB (Message Driven Bean), apoyndonos en la
herramienta: Oracle Enterprise Pack for Eclipse que en si es un ECLIPSE.
Antes que nada un poco de conceptos:
ENTERPRISE JAVABEANS (EJB):
Enterprise JavaBeans son componentes de J2EE que implementan la tecnologa Enterprise JavaBeans (EJB). Estos
beans corren dentro de un EJB container, en un runtime environment dentro del Application Server. Proporcionan un
modelo de componentes que simplifica el desarrollo de aplicaciones del lado del servidor, proporcionando apoyo
automtico a los servicios como las transacciones, seguridad y conectividad de base de datos. Estos servicios son
proporcionados por el contenedor EJB que forma parte del servidor de aplicaciones. El contenedor maneja el ciclo de
vida completo del Enterprise JavaBean (EJB). EJB 2.0 especifica tres tipos de Beans: Session, Entity, Message
Bean.
MESSAGE DRIVEN BEAN (MDB):
Un MDB (Bean controlado por mensajes) es un consumidor de mensajes asncrono y es invocado por el
contenedor EJB al momento de la llegada de un mensaje JMS en una cola. Un cliente no puede acceder al Bean
directamente, sino que lo hace mediante el envo de mensajes al destino de JMS (cola o tema), este MDB se activa
mediante la implementacin de la clase MessageListener. Los mensajes de beans no tiene estado conversacional y
son annimos.
Una plantilla base de un MDB debera lucir de esta manera:
import
import
import
import
import
import
import
import
javax.ejb.ActivationConfigProperty;
javax.ejb.MessageDriven;
javax.ejb.MessageDrivenBean;
javax.ejb.MessageDrivenContext;
javax.jms.Message;
javax.jms.MessageListener;
javax.annotation.Resource;
javax.ejb.EJBException;
/**
* JavamanMDB
* @author cguerra
*/
@MessageDriven( activationConfig = { @ActivationConfigProperty(
propertyName = "destinationType",
propertyValue = "javax.jms.Queue") },
mappedName
= "jms/MQ_01",
messageListenerInterface =
MessageListener.class )
public class JavamanMDB implements MessageListener, MessageDrivenBean{
private static final long serialVersionUID = 6500707485732319445L;
@Resource
private MessageDrivenContext mdc = null;
//Constructor ...
public JavamanMDB(){
}
/**
* setMessageDrivenContext
* @param mdcParam
*/
@Override
public void setMessageDrivenContext( MessageDrivenContext mdcParam ){
this.mdc = mdcParam;
}
/**
* ejbRemove
*/
@Override
public void ejbRemove() throws EJBException {
}
/**
* onMessage
* @param messageParam
*/
public void onMessage( Message messageParam ){
}
}
INICIANDO EL DUMMY:
1. El App Client ser un tipo lanzador de la siguiente manera:
Nos hemos apoyado en: UtilJMS.java que es un POJO utilitario que nos facilitara el envo y obtencin del
contenido de colas de tipo JMS.
Al momento de crear un proyecto JAVA simple, mapeamos los .JAR respectivos dentro del ClassPath del
App: wlclient.jar y jmscommon.jar
2. Dentro del App Cliente se necesita conectarnos al Servidor de Aplicaciones por medio de unos JNDI
para: Colas, Factory y User/Passwor creados:
-
FACTORY: jms/crgaQueueConexionFactory
COLA:
jms/crgaTestQueue
Todo eso es una configuracin que si desean hacerla desde cero se tendrn que apoyar en el tutorial:
http://frameworksjava2008.blogspot.com/2012/05/configuracion-jms-en-oracle-weblogic.html
3. Para la creacin del MDB( el objetivo de este tutorial ), nos basaremos en la IDE: Eclipse (Oracle
Enterprise Pack for Eclipse), que viene como adicional cuando se instala el Oracle Fusion
Middleware 11.
Creamos un nuevo App de tipo EJB:
Dummy_Javaman_MDB
Dummy_Javaman_MDBClient
Dummy_Javaman_MDB_EAR
Definimos los parmetros del MDB y la cola JMS a la cual se conectara (Debe se JMS/crgaTestQueue),
dependiendo como se haya configurado el JNDI:
javax.jms.MessageListener
javax.ejb.MessageDrivenBean
package org.java.mdb.dummy;
import
import
import
import
import
import
javax.ejb.ActivationConfigProperty;
javax.ejb.MessageDriven;
javax.ejb.MessageDrivenBean;
javax.ejb.MessageDrivenContext;
javax.jms.Message;
javax.jms.MessageListener;
/**
* JavamanBeanMDB
* @author Cesar Ricardo
*/
@MessageDriven(activationConfig = { @ActivationConfigProperty( propertyName
propertyValue = "javax.jms.Queue") },
mappedName
= "crgaTestQueue",
messageListenerInterface = MessageListener.class )
public class JavamanBeanMDB implements MessageListener, MessageDrivenBean{
= "destinationType",
Agregar las libreras de JMS y Log4j dentro de una carpeta .lib del ClassPath de la aplicacin MDB en:
Dummy_Javaman_MDB:
-
jmscommon.jar
log4j-1.2.9.jar
wlclient.jar
Modificar la clase MDB para que al momento de activarse lea sepa lee el mensaje JMS captado:
package org.java.mdb.dummy;
import
import
import
import
import
import
import
import
import
import
org.apache.log4j.Logger;
javax.annotation.Resource;
javax.ejb.ActivationConfigProperty;
javax.ejb.MessageDriven;
javax.ejb.MessageDrivenBean;
javax.ejb.MessageDrivenContext;
javax.jms.JMSException;
javax.jms.Message;
javax.jms.MessageListener;
javax.jms.TextMessage;
/**
* JavamanBeanMDB
* @author Cesar Ricardo
*/
= "destinationType",
codigo
nombres
apellidos
dni
edad
telefono
=
=
=
=
=
=
System.out.println(
System.out.println(
System.out.println(
System.out.println(
System.out.println(
System.out.println(
System.out.println(
System.out.println(
arrayTrama[
arrayTrama[
arrayTrama[
arrayTrama[
arrayTrama[
arrayTrama[
" " );
"CODIGO:
"NOMBRES:
"APELLIDOS:
"DNI:
"EDAD:
"TELEFONO:
" " );
0
1
2
3
4
5
"
"
"
"
"
"
];
];
];
];
];
];
+
+
+
+
+
+
codigo
nombres
apellidos
dni
edad
telefono
);
);
);
);
);
);
}
}
catch( JMSException e ){
this.logger.error( "ERROR [JMSException]: ", e );
e.printStackTrace();
this.mdc.setRollbackOnly();
}
catch( Exception e ){
this.logger.error( "ERROR [Exception]: ", e );
e.printStackTrace();
}
catch( Throwable e ){
this.logger.error( "ERROR [Throwable]: ", e );
e.printStackTrace();
}
}
}
Luego, de la SEGMENTACION e IMPRESIN de los datos el mensaje obtenido. Uno puede aqu hacer muchas
cosas, especficamente lo que el negocio requiera:
-
Lo importante es que el mensaje ya ha sido capturado correctamente. En este caso el mensaje a sido de tipo
TRAMA con separado pero podra venir en N formatos: Trama (con separador), XML, Trama (Sin
separador), etc.
Ahora vamos a desplegamos, en el SERVER el MDB creador:
Luego de tener todo configurado y listo, ejecutamos el App Client para ejecutar la trama JMS: