Version 7

    QueueRequestor Example

     

    The following code shows how to use the QueueRequestor.

     

    The QueueRequestor is actually quite lame. Internally it does

    QueueRecevier.receive()

    which will wait forever if there is nobody listening to your requests. Better would to use a timeout,

    QueueRecevier.recieve(timeout);

     

      Code

    import java.util.Properties;
    
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.Queue;
    import javax.jms.QueueConnection;
    import javax.jms.QueueConnectionFactory;
    import javax.jms.QueueReceiver;
    import javax.jms.QueueRequestor;
    import javax.jms.QueueSender;
    import javax.jms.QueueSession;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    
    public class Client implements MessageListener
    {
       public static void main(String[] args) throws Exception
       {
          log.info("Creating jndi context - alternatively use a jndi.properties");
          Properties properties = new Properties();
          properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
          properties.put(Context.URL_PKG_PREFIXES, "org.jnp.interfaces");
          properties.put(Context.PROVIDER_URL, "localhost");
          InitialContext ctx = new InitialContext(properties);
    
          log.info("Looking up queue");
          Queue queue = (Queue) ctx.lookup("queue/testQueue");
    
          log.info("Looking up connection factory");
          QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("UIL2ConnectionFactory");
    
          log.info("Creating connection");
          QueueConnection qc = qcf.createQueueConnection();
          try
          {
             log.info("Creating session");
             QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
    
             log.info("Creating receiver");
             QueueReceiver receiver = qs.createReceiver(queue);
    
             log.info("Set the message listener");
             receiver.setMessageListener(new Client(qs));
    
             log.info("You have to start the connection before receiving messages");
             qc.start();
    
             log.info("Creating queue requestor session");
             QueueSession qrs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
             
             log.info("Creating queue requestor");
             QueueRequestor qr = new QueueRequestor(qrs, queue);
    
             log.info("Creating message");
             TextMessage hello = qs.createTextMessage("hello");
    
             log.info("Sending request");
             Message response = qr.request(hello);
    
             log.info("Close the queue requestor");
             qr.close();
    
             log.info("Got response " + response);
          }
          finally
          {
             qc.close();
          }
       }
    
       QueueSession session;
    
       public Client(QueueSession session)
       {
          this.session = session;
       }
    
       public void onMessage(Message message)
       {
          log.info("Processing message: " + message);
          try
          {
             Queue replyQueue = (Queue) message.getJMSReplyTo();
             log.info("Reply queue is: " + replyQueue);
    
             log.info("Creating sender");
             QueueSender sender = session.createSender(replyQueue);
    
             log.info("Creating reply");
             TextMessage reply = session.createTextMessage("Reply");
    
             log.info("Sending reply");
             sender.send(reply);
    
             log.info("Tidyup sender - you could be processing many requests");
             sender.close();
          }
          catch (JMSException e)
          {
             log.error("Got unexpected error", e);
             System.exit(0);
          }
       }
    
       public static class log
       {
          public static void info(String message)
          {
             System.out.println(message);
          }
    
          public static void error(String message, Throwable t)
          {
             System.err.println(message);
             t.printStackTrace();
          }
       }
    }
    

     

    Instructions

    To compile it:
    javac -classpath JBOSS_HOME/client/jbossall-client.jar Client.java
    or windows
    javac -classpath JBOSS_HOME\client\jbossall-client.jar Client.java
    
    To run it:
    java -classpath .:JBOSS_HOME/client/jbossall-client.jar Client
    or windows
    java -classpath .;JBOSS_HOME\client\jbossall-client.jar Client
    

     

    Output

     
    Creating jndi context - alternatively use a jndi.properties
    Looking up queue
    Looking up connection factory
    Creating connection
    Creating session
    Creating receiver
    Set the message listener
    You have to start the connection before receiving messages
    Creating queue requestor session
    Creating queue requestor
    Creating message
    Sending request
    Processing message: SpyTextMessage {
    Header { 
        jmsDestination  : QUEUE.testQueue
        jmsDeliveryMode : 2
        jmsExpiration   : 0
        jmsPriority     : 4
        jmsMessageID    : ID:1-10825512815071
        jmsTimeStamp    : 1082551281507
        jmsCorrelationID: null
        jmsReplyTo      : QUEUE.JMS_TQ1
        jmsType         : null
        jmsRedelivered  : false
        jmsProperties   : {}
        jmsPropReadWrite: false
        msgReadOnly     : true
        producerClientId: ID:1
    }
    Body {
        text            :hello
    }
    }
    Reply queue is: QUEUE.JMS_TQ1
    Creating sender
    Creating reply
    Sending reply
    Tidyup sender - you could be processing many requests
    Close the queue requestor
    Got response SpyTextMessage {
    Header { 
       jmsDestination  : QUEUE.JMS_TQ1
       jmsDeliveryMode : 1
       jmsExpiration   : 0
       jmsPriority     : 4
       jmsMessageID    : ID:1-10825512820892
       jmsTimeStamp    : 1082551282089
       jmsCorrelationID: null
       jmsReplyTo      : null
       jmsType         : null
       jmsRedelivered  : false
       jmsProperties   : {}
       jmsPropReadWrite: false
       msgReadOnly     : true
       producerClientId: ID:1
    }
    Body {
       text            :Reply
    }
    }