Menú Curso Java EJB's : Código Fuente "BancaDeInversion" empleado como "Messaging EJB"

(Anterior) Messaging Beans
  Para que el presente "Messaging EJB" sea ejecutado correctamente 
  en su ambiente, debe agregar un usuario capaz de publicar mensajes 
  al proveedor JMS de JBoss.Este proceso es realizado a través de la 
  misma Base de Datos que ha venido utilizando para "Entity EJB": 
  Hypersonic. 
 
  Seguramente habrá notado que además de las tablas generadas en sus 
  diseños, Hypersonic ya incluye algunas otras por "default", estas 
  corresponden precisamente al proveedor JMS de JBoss. 

  De la misma consola administrativa de Hypersonic , ejecute los 
  siguientes comandos :  

     INSERT INTO JMS_USERS (USERID, PASSWD) VALUES ('bmv', 'a7y7fg');
     INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('guest','bmv');
     INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('subscriber','bmv');
     INSERT INTO JMS_ROLES (ROLEID, USERID) VALUES ('publisher','bmv');

  Esto genera el usuario bmv -- empleado en este diseño de Messaging EJB-- 
  y le asigna varios roles de ejecución. 

 Como alterantiva, puede optar por colocar esta misma secuencia de 
 ejecucion en el archivo hsqldb-jdbc-state-service.xml para
 que los valores sean cargados automaticamente al inicialiarse JBoss. 
 Dicho archivo esta ubicado en $JBOSS_HOME/server/default/deploy/jms/, 
 donde $JBOSS_HOME es el directorio raíz de instalación.

Clase "BancaDeInversion"


package com.osmosislatina.ejb.bolsa;

import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.ejb.EJBException;


import javax.jms.MessageListener;
import javax.jms.Message;
import javax.jms.TextMessage;
import javax.jms.JMSException;


public class BancaDeInversion implements MessageDrivenBean, MessageListener { 

 
    private MessageDrivenContext ctx;

    public void ejbCreate() { } 
    
    public void ejbRemove() { ctx = null; } 


    public void setMessageDrivenContext(MessageDrivenContext ctx) {
	 this.ctx = ctx;
    }
 
    public void onMessage(Message message)  { 
	
	TextMessage textmessage = null;
	if (message instanceof TextMessage) { 
	    textmessage = (TextMessage)message;
	} else { 
	    return;
	}

	try { 
	    String s = textmessage.getText();
	     System.out.println("Valores de Acciones Recibidos : " + s);
	 } catch (JMSException ex) { 
	     ex.printStackTrace();
	 }
     }
    
}

  • En esta primer sección se importan las diversas clases que serán utilizadas a lo largo del EJB, vale notar que dentro de éstas se incluyen java.jms las cuales forman parte de JMS general, mientras aquellas con el prefijo javax.ejb corresponden al "Messaging Bean" en particular.

  • Posteriormente se inicia la declaración de la clase, la cual implementa MessageDrivenBean y MessageListener, la primera contiene los métodos clásicos utilizados por un EJB, mientras MessageListener contiene el método onMessage.

  • La única variable definida para el "Messaging Bean" es MessageDrivenContext, su funcionamiento es igual aquel utilizado por EntityContext en "BMP Entity EJB's", proporcionar un espacio compartido para las diversas "instancias" de EJB's.

  • Le siguen los dos métodos clásicos de EJB's ejbCreate y ejbRemove, seguido del método de asignación de contexto setMessageDrivenContext.

  • onMessage es la parte central del "Messaging EJB", el primer paso que se realiza es verificar que el mensaje recibido por el "EJB" sea efectivamente un mensaje de texto (TextMessage) esto se realiza a través del operador instanceOf, otras alternativas para el mensaje pudieran ser : ByteMessage,ObjectMessage,StreamMessage o MapMessage; una vez verificado lo anterior se asigna el valor a la variable textMessage a través de un "cast".

  • Posteriormente se extrae el texto del mensaje y se imprime al registro del "Application Server"/EJB Container.

Terminos Legales de Contenido ©2000-2011 Osmosis Latina

Diseñado bajo estándares : XHTML   CSS  

webmaster@osmosislatina.com