title: JMS message receiver filtering by JMSCorrelationID
body: <p><P>How can I instantiate a JMS queue listener in java (JRE /JDK / J2EE 1.4) that only receives messages that match a given JMSCorrelationID?  The messages that I'm looking to pick up have been published to a queue and not a topic, although that can change if needed.</P>
  Here's the code that I'm currently using to put the message in the queue:</p>
  
  <pre><code>/**
   * publishResponseToQueue publishes Requests to the Queue.
   *
   * @param   jmsQueueFactory             -Name of the queue-connection-factory
   * @param   jmsQueue                    -The queue name for the request
   * @param   response                     -A response object that needs to be published
   * 
   * @throws  ServiceLocatorException     -An exception if a request message
   *                                      could not be published to the Topic
   */
  private void publishResponseToQueue( String jmsQueueFactory,
                                      String jmsQueue,
                                      Response response )
          throws ServiceLocatorException {
  
      if ( logger.isInfoEnabled() ) {
          logger.info( "Begin publishRequestToQueue: " +
                           jmsQueueFactory + "," + jmsQueue + "," + response );
      }
      logger.assertLog( jmsQueue != null &amp;&amp; !jmsQueue.equals(""),
                        "jmsQueue cannot be null" );
      logger.assertLog( jmsQueueFactory != null &amp;&amp; !jmsQueueFactory.equals(""),
                        "jmsQueueFactory cannot be null" );
      logger.assertLog( response != null, "Request cannot be null" );
  
      try {
  
          Queue queue = (Queue)_context.lookup( jmsQueue );
  
          QueueConnectionFactory factory = (QueueConnectionFactory)
              _context.lookup( jmsQueueFactory );
  
          QueueConnection connection = factory.createQueueConnection();
          connection.start();
          QueueSession session = connection.createQueueSession( false,
                                      QueueSession.AUTO_ACKNOWLEDGE );
  
          ObjectMessage objectMessage = session.createObjectMessage();
  
          objectMessage.setJMSCorrelationID(response.getID());
  
          objectMessage.setObject( response );
  
          session.createSender( queue ).send( objectMessage );
  
          session.close();
          connection.close();
  
      } catch ( Exception e ) {
          //XC3.2  Added/Modified BEGIN
          logger.error( "ServiceLocator.publishResponseToQueue - Could not publish the " +
                        "Response to the Queue - " + e.getMessage() );
          throw new ServiceLocatorException( "ServiceLocator.publishResponseToQueue " +
                                             "- Could not publish the " +
                        "Response to the Queue - " + e.getMessage() );
          //XC3.2  Added/Modified END
      }
  
      if ( logger.isInfoEnabled() ) {
          logger.info( "End publishResponseToQueue: " +
                           jmsQueueFactory + "," + jmsQueue + response );
      }
  
  }  // end of publishResponseToQueue method 
  </code></pre>