El siguiente Cliente envía el valor de ciertas acciones -- en forma de mensaje -- hacia el "Messaging Bean" diseñado anteriormente.
Clase BolsaDeValores
package com.osmosislatina.ejb.bolsa; import javax.naming.*; import javax.jms.*; import java.util.*; public class BolsaDeValores { |
private TopicConnectionFactory tcf; private TopicConnection tcon; private TopicSession tsession; private Topic topic; private TopicPublisher tpublisher; private Context ctx; |
public BolsaDeValores() throws NamingException { try { ctx = getInitialContext(); tcf = (TopicConnectionFactory)ctx.lookup("ConnectionFactory"); tcon = tcf.createTopicConnection(); tcon.start(); } catch (Exception exception) { exception.printStackTrace(); } } |
private Context getInitialContext() throws NamingException { try { return new InitialContext(); } catch (NamingException ex) { System.out.println("No fue posible crear el contexto para ubicar nombres en JNDI" + ex ); throw ex; } } |
public void procesar() throws Exception { try { tsession = tcon.createTopicSession(false,1); topic = (Topic)ctx.lookup("topic/acciones"); tpublisher = tsession.createPublisher(topic); TextMessage message = tsession.createTextMessage(); message.setText("RedHat 53 1/2, Microsoft 64 3/4, Dell 34 2/3"); tpublisher.publish(message); System.out.println("Valores procesados"); } catch (Exception ex) { System.err.println("No fue posible procesar el valor de las acciones : " + ex); } } |
public static void main(String[] args) throws Exception { BolsaDeValores tarjeta = new BolsaDeValores(); tarjeta.procesar(); } } |
El Cliente anterior se encuentra fraccionado por métodos con la intención de ilustrar un diseño propio en Java.
El método principal
main
genera una instancia de la Clase en cuestión llamadatarjeta
y sobre esta misma instancia se manda llamar el métodoprocesar()
.El método
BolsaDeValores()
representa el conocido "Constructor" del lenguaje Java, el cual es llamado al iniciarse cualquier instancia de la Clase, en esta clase el constructor realiza las siguientes tareas:Asigna un Contexto JNDI al cliente (A través de otra función)
Realiza una búsqueda JNDI por la fabrica ("ConnectionFactory") que proporciona Tópicos Messaging.
-
Se genera una conexión hacia la Fabrica antes mencionada.
getInitialContext
es el método llamado dentro del "Constructor" que adquiere el Contexto JNDI, nótese que a diferencia de otros clientes no fue definido ningún tipo de parámetro enInitialContext()
; este detalle es explicado en la siguiente sección.procesar
es el método que envía el mensaje hacia el "Messaging EJB", ejecuta lo siguiente:Genera una sesión hacia el topic, el parámetro
false
indica que no se desean utilizar transacciones, mientras1
indica como se debe responder a mensajes recibidos, siendo que este cliente funciona como un emisor y no como un subscriptor éste último parámetro es irrelevante.Se realiza una búsqueda por el topic que ha sido asignado al "EJB" (
acciones
), el prefijotopic
es una convención utilizada en JNDI para sistemas messaging.Se genera el productor de mensajes
tpublisher
, indicando que éste enviará sus mensajes hacia el tópico antes descrito.Es creado y publicado el mensaje con los valores apropiados.
Se imprime un mensaje a pantalla indicando éxito de envío.