El manejo de mensajería es utilizado normalmente por los sistemas de tipo Legacy , debido a la rapidez en la transmisión de datos, como por la facilidad de integración. El formato de los mensajes normalmente enviados (tramas) pueden ser de distintos tipos:
- TRAMAS LINEALES: 01cesar ricardoguerra arnaiz4181613329masculino
- TRAMAS LINEALES (SEPARADOR): 01|cesar ricardo|guerra arnaiz|41816133|29|masculino|
- TRAMAS XML: [usuario] [codigo] 01 [/codigo] [nombres]
cesar ricardo [/nombres] [apellidos] guerra arnaiz [/apellidos] [dni] 41816133 [/dni] [edad] 29 [/edad] [sexo]
masculino [/sexo] [/usuario]
El ejemplo preparado mostrara una clase utilitaria que facilitara el ENVIO y CONSULTA a una cola JMS.
El ejemplo preparado mostrara una clase utilitaria que facilitara el ENVIO y CONSULTA a una cola JMS.
Para
poder probar este ejemplo es necesario que se tenga configurado e
iniciado el Servidor de Aplicaciones. Para ello es requerimiento
primordial que se desarrolle primero este post: CONFIGURACION-JMS-EN-ORACLE-WEBLOGIC
La clase utilitaria JMS lista para utilizar es la siguiente:
import
java.util.Hashtable;
import
javax.jms.JMSException;
import
javax.jms.Message;
import
javax.jms.Queue;
import
javax.jms.QueueConnection;
import
javax.jms.QueueConnectionFactory;
import
javax.jms.QueueReceiver;
import
javax.jms.QueueSender;
import javax.jms.QueueSession;
import
javax.jms.TextMessage;
import
javax.naming.Context;
import
javax.naming.InitialContext;
/**
* UtilJMS Util creado
para el manejo de JMS. Enviar y Obtener mensajes de tipo:
* PUNTO a PUNTO.
* @author CGUERRA
*/
public class UtilJMS{
private Context objContexto = null;
private QueueConnectionFactory
objQueueFactory = null;
private QueueConnection objQueueConexion = null;
private QueueSession objQueueSesion = null;
private Queue objQueue = null;
private QueueSender objQueueSender = null;
private QueueReceiver objQueueReciver = null;
private TextMessage objTextMensaje = null;
private Message objMensaje = null;
private String JNDI_QUEUE_FACTORY = null; //IMPORTANTE
private String JDNI_QUEUE = null; //IMPORTANTE
private String MENSAJE_JMS = null;
private static final String CONTEXTO =
"weblogic.jndi.WLInitialContextFactory";
private static final String URL = "t3://localhost:7001";
private static final String USUARIO = "javaman";
private static final String PASSWORD =
"12345678";
//Constructores ...
public UtilJMS( String JNDI_QUEUE_FACTORY,
String JDNI_QUEUE ){
this.JNDI_QUEUE_FACTORY =
JNDI_QUEUE_FACTORY;
this.JDNI_QUEUE = JDNI_QUEUE;
}
/**
*
enviarMensajeJMS_punto_a_punto
* @param
mensajeParam
*/
public void
enviarMensajeJMS_punto_a_punto( String mensajeParam ){
System.out.println( "******** DENTRO DE:
[enviarMensajeJMS_punto_a_punto] ********" );
this.MENSAJE_JMS
= mensajeParam;
try{
if(
(this.JNDI_QUEUE_FACTORY != null) &&
(this.JDNI_QUEUE != null) ){
//---------------- CONFIGURACION [INICIO] ----------------//
Hashtable
objProperties = new Hashtable();
objProperties.put( Context.INITIAL_CONTEXT_FACTORY, CONTEXTO );
objProperties.put(
Context.PROVIDER_URL, URL );
objProperties.put( Context.SECURITY_PRINCIPAL, USUARIO
);
objProperties.put(
Context.SECURITY_CREDENTIALS, PASSWORD
);
//---------------- CONFIGURACION
[FINAL] -----------------//
this.objContexto = new InitialContext( objProperties );
this.objQueueFactory =
(QueueConnectionFactory)this.objContexto.lookup( this.JNDI_QUEUE_FACTORY );
this.objQueueConexion =
objQueueFactory.createQueueConnection();
this.objQueueSesion = this.objQueueConexion.createQueueSession(
false, 0 );
this.objQueue = (Queue)this.objContexto.lookup(
this.JDNI_QUEUE );
this.objQueueSender = this.objQueueSesion.createSender( this.objQueue
);
//SETEANDO MENSAJE:
this.objTextMensaje = this.objQueueSesion.createTextMessage();
this.objTextMensaje.setText(
mensajeParam );
this.objTextMensaje.setStringProperty( "id_01", mensajeParam )
;
System.out.println( "-
MENSAJE SETEADO: " + this.objTextMensaje.toString() );
System.out.println( "-
OBTENIENDO [TEXT MENSAJE]: " +
this.objTextMensaje.toString() );
//ENVIANDO MENSAJE:
this.objQueueSender.send( this.objTextMensaje );
System.out.println( "- MENSAJE ENVIADO ...!!!" );
//LIMPIANDO & CERRAR CONEXIONES:
this.limpiarCerrarConexiones();
}
}
catch( JMSException e ){
e.printStackTrace();
}
catch( Exception e ){
e.printStackTrace();
}
}
/**
*
obtenerMensajeJMS_punto_a_punto
*/
public void
obtenerMensajeJMS_punto_a_punto(){
System.out.println( "******** DENTRO DE:
[obtenerMensajeJMS_punto_a_punto] ********" );
try{
if( (this.JNDI_QUEUE_FACTORY !=
null) &&
(this.JDNI_QUEUE != null) ){
//----------------
CONFIGURACION [INICIO] ----------------//
Hashtable objProperties = new
Hashtable();
objProperties.put(
Context.INITIAL_CONTEXT_FACTORY, CONTEXTO );
objProperties.put(
Context.PROVIDER_URL, URL );
objProperties.put(
Context.SECURITY_PRINCIPAL,
USUARIO );
objProperties.put(
Context.SECURITY_CREDENTIALS, PASSWORD
);
//---------------- CONFIGURACION
[FINAL] -----------------//
this.objContexto = new InitialContext( objProperties );
this.objQueueFactory =
(QueueConnectionFactory)this.objContexto.lookup( this.JNDI_QUEUE_FACTORY );
this.objQueue = (Queue)this.objContexto.lookup(
this.JDNI_QUEUE );
this.objQueueConexion =
this.objQueueFactory.createQueueConnection();
this.objQueueSesion = this.objQueueConexion.createQueueSession(
false,objQueueSesion.AUTO_ACKNOWLEDGE );
this.objQueueReciver = this.objQueueSesion.createReceiver(
this.objQueue );
//INICIAR LA OBTENCION
DE LOS DATOS DE LA [COLA JMS]:
this.objQueueConexion.start();
long
tiempoEspera = 1000; //[1 SEG = 1000
MILISEGUNDOS].
for(
;true; ){
//OBTENEMOS TODOS LOS TIPOS DE MENSAJES DE LA [COLA JMS].
this.objMensaje =
this.objQueueReciver.receive( tiempoEspera );
if( this.objMensaje != null){
if( this.objMensaje instanceof
TextMessage ){
//OBTENER
LOS MENSAJES DE TIPO TEXTO DE LA [COLA JMS]:
this.objTextMensaje = (TextMessage)this.objMensaje;
System.out.println(
"MENSAJES ENCONTRADO EN [COLA JMS]: " + this.objTextMensaje
.getText() );
System.out.println( "getJMSCorrelationID: " +
this.objMensaje.getJMSCorrelationID() );
System.out.println( "getJMSReplyTo: " +
this.objMensaje.getJMSReplyTo() );
System.out.println( "getJMSMessageID: " +
this.objMensaje.getJMSMessageID() );
System.out.println(
"getJMSType: " +
this.objMensaje.getJMSType() );
this.objTextMensaje.acknowledge();
}
}
else{
System.out.println( "NO HAY MENSAJES EN LA [COLA JMS]" );
break;
}
}
//LIMPIAMOS Y CERRAMOS CONEXIONES:
this.limpiarCerrarConexiones();
}
}
catch(
JMSException e ){
e.printStackTrace();
}
catch( Exception e ){
e.printStackTrace();
}
}
/**
*
limpiarCerrarConexiones
*/
public void
limpiarCerrarConexiones(){
try{
if( this.objQueueSender != null ){
this.objQueueSender.close();
}
if( this.objQueueReciver != null ){
this.objQueueReciver.close();
}
if(
this.objQueueSesion != null ){
this.objQueueSesion.close();
}
if(
this.objQueueConexion != null ){
this.objQueueConexion.close();
}
this.objMensaje = null;
this.objTextMensaje = null;
this.objQueueSender = null;
this.objQueueReciver = null;
this.objQueue = null;
this.objQueueSesion = null;
this.objQueueConexion = null;
this.objQueueFactory = null;
this.objContexto = null;
System.out.println( "-
LIMPIANDO CONFIGURACION ...!!!" );
}
catch( JMSException e ){
e.printStackTrace();
}
catch( Exception e ){
e.printStackTrace();
}
}
}
Para poder probar este mensaje es necesario setear el USUARIO/PASSWORD del SERVIDOR de APLICACIONES en las variables: USUARIO, PASSWORD y configurar el CONTEXTO y URL. Luego de ellos vasta con hacer lo siguiente:
UtilJMS utilJMS = new UtilJMS( "jms/crgaQueueConexionFactory", "jms/crgaTestQueue" );
//ENVIAR JMS:
utilJMS.enviarMensajeJMS_punto_a_punto( “TRAMA_CREADA” );
//OBTENER JMS:
utilJMS.obtenerMensajeJMS_punto_a_punto();
Es todo el resultado será mostrado en consola.
Saludos.
No hay comentarios:
Publicar un comentario