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

jueves, 10 de mayo de 2012

MANEJO DE JMS.

En esta oportunidad mostrare el manejo de la API de JMS para el manejo de mensajería y colas.

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.

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.