Message message = null;
synchronized (client) {
List consumers = client.getConsumers();
MessageAvailableConsumer consumer = null;
// Look for a message that is ready to go
for (int i = 0; message == null && i < consumers.size(); i++) {
consumer = (MessageAvailableConsumer)consumers.get(i);
if (consumer.getAvailableListener() == null) {
continue;
}
// Look for any available messages
message = consumer.receiveNoWait();
if (LOG.isDebugEnabled()) {
LOG.debug("received " + message + " from " + consumer);
}
}
// Get an existing Continuation or create a new one if there are no
// messages
if (message == null) {
// register this continuation with our listener.
listener.setContinuation(continuation);
// Get the continuation object (may wait and/or retry
// request here).
continuation.suspend(timeout);
}
listener.setContinuation(null);
// prepare the responds
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
StringWriter swriter = new StringWriter();
PrintWriter writer = new PrintWriter(swriter);
Map<MessageAvailableConsumer, String> consumerIdMap = getConsumerIdMap(request);
Map<MessageAvailableConsumer, String> consumerDestinationNameMap = getConsumerDestinationNameMap(request);
response.setStatus(HttpServletResponse.SC_OK);
writer.println("<ajax-response>");
// Send any message we already have
if (message != null) {
String id = consumerIdMap.get(consumer);
String destinationName = consumerDestinationNameMap.get(consumer);
writer.print("<response id='");
writer.print(id);
writer.print("'");
if (destinationName != null) {
writer.print(" destination='" + destinationName + "' ");
}
writer.print(">");
writeMessageResponse(writer, message);
writer.println("</response>");
messages++;
}
// Send the rest of the messages
for (int i = 0; i < consumers.size() && messages < maximumMessages; i++) {
consumer = (MessageAvailableConsumer)consumers.get(i);
if (consumer.getAvailableListener() == null) {
continue;
}
// Look for any available messages
while (messages < maximumMessages) {
message = consumer.receiveNoWait();
if (message == null) {
break;
}
messages++;
String id = consumerIdMap.get(consumer);