Obter lista de resultados de uma fila JMS com o mesmo id

eu tenho varias mensagens jms com o mesmo cpf. Como eu poderia consumir para retornar todos, como uma lista, ao invés de somente um como abaixo ?
Estou usando jboss5.1.


			ConnectionFactory factory = (QueueConnectionFactory) getInitialContext().lookup("/ConnectionFactory");//java:/ConnectionFactory
			connection = factory.createConnection();
			session = connection.createSession(false, QueueSession.AUTO_ACKNOWLEDGE);
			Destination destination = (Destination) getInitialContext().lookup(lookup);

			MessageConsumer consumer = session.createConsumer(destination, messageSelector); // cpf= '123456789'
			connection.start();
			Message message = consumer.receive(5000);
			om = (ObjectMessage) message;

Se o modelo utilizado for o one-to-one, então diria para utilizar a classe QueueBrowser, que é uma classe
especializada para olhar todas as mensagens de uma Queue sem consumir tais mensagens.

[code]public class RequestQueueBrowser {

public static void main(String[] args) {
	try {
		Context context = new InitialContext();
		QueueConnectionFactory factory = (QueueConnectionFactory)context.lookup(args[0]);
		QueueConnection connection = factory.createQueueConnection();
		connection.start();
		Queue queue = (Queue) context.lookup(args[1]);
		QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
		QueueBrowser browser = session.createBrowser(queue);
		String CPF = "";
                    List<TextMessage> list = new ArrayList<TextMessage>();

		Enumeration e = browser.getEnumeration();
		while (e.hasMoreElements()) {
			TextMessage msg = (TextMessage)e.nextElement();

                             if(msg.getText().equals(CPF)) {
                                 list.add(msg);
                             }

			System.out.println("Browsing: " + msg.getText());
		}
		
		browser.close();
		connection.close();
		System.exit(0);
	} 
	catch (Exception exception) {}
}

}[/code]

Mas essa é uma solução caso não se precise consumir de fato a mensagem que se encontra na Queue.

sim johnny, é one-to-one

O problema é q depois de eu receber a mensagem preciso remover da fila. Já estava considerendo usar a QueueBrower, mas não achei nada ainda que delete essas mensagens da fila após percorrer, somente qdo consome…

Na verdade é possível tirar aquele if no código e passar o seletor diretamente para a QueueBrowser

String messageSelector= "cpf='1234456'";

QueueBrowser queueBrowser = queueSession.createBrowser(queue, messageSelector)

Depois de retornadas todas as mensagens que devem ser consumidas, então você poderá pegar o ID de cada
mensagem e consumir cada uma delas dentro de for passando a lista de ID das mensagens que devem ser consumidas da Queue.

Você pode pegar o header da mensagem JMSMessageID message.getJMSMessageID()
e passar como seletor para consumir somente as mensagens desejadas.

[code]

for(MessageText message: list) {

String messageSelector = “JMSMessageID=’”+message.getJMSMessageID()+"’";

MessageConsumer consumer = session.createConsumer(destination, messageSelector);

}[/code]


Depois é só salvar o consumer em uma lista, com isso consumirá todas as mensagens desejadas.

pra agilizar o processo criei uma classe com uma lista e envio ela para a fila, e consumo apenas uma vez o objeto com a lista, ao invés de várias mensagens na fila … qdo tiver mais tempo tento do jeito que vc falou

valeo.