JMS message récepteur de filtrage par JMSCorrelationID

Comment instancier une file d'attente JMS auditeur en java (JRE /JDK /J2EE 1.4) qui reçoit uniquement les messages qui correspondent à un JMSCorrelationID? Les messages que je suis à la recherche de ramasser ont été publiés à une file d'attente et pas un sujet, mais cela peut changer si nécessaire.

Voici le code que j'utilise actuellement pour mettre le message dans la file d'attente:

/**
* 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 && !jmsQueue.equals(""),
"jmsQueue cannot be null" );
logger.assertLog( jmsQueueFactory != null && !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 

OriginalL'auteur Tom S | 2008-09-29