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 |
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 prefijojavax.ejb
corresponden al "Messaging Bean" en particular.Posteriormente se inicia la declaración de la clase, la cual implementa
MessageDrivenBean
yMessageListener
, la primera contiene los métodos clásicos utilizados por un EJB, mientrasMessageListener
contiene el métodoonMessage
.La única variable definida para el "Messaging Bean" es
MessageDrivenContext
, su funcionamiento es igual aquel utilizado porEntityContext
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
yejbRemove
, seguido del método de asignación de contextosetMessageDrivenContext
.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 operadorinstanceOf
, otras alternativas para el mensaje pudieran ser :ByteMessage,ObjectMessage,StreamMessage
oMapMessage
; una vez verificado lo anterior se asigna el valor a la variabletextMessage
a través de un "cast".Posteriormente se extrae el texto del mensaje y se imprime al registro del "Application Server"/EJB Container.