in core/src/main/java/flex/messaging/services/messaging/adapters/JMSAdapter.java [324:391]
public Object invoke(Message message) {
JMSProducer producer = null;
// named Flex message props become JMS headers
Map msgProps = message.getHeaders();
msgProps.put(JMSConfigConstants.TIME_TO_LIVE, new Long(message.getTimeToLive()));
if (settings.getDestinationType().equals(TOPIC)) {
synchronized (topicProducers) {
if (topicProducers.size() < settings.getMaxProducers()) {
producer = new JMSTopicProducer();
try {
producer.initialize(settings);
producer.start();
} catch (Exception e) {
throw constructMessageException(e);
}
} else {
producer = topicProducers.removeFirst();
}
topicProducers.addLast(producer);
}
} else if (settings.getDestinationType().equals(QUEUE)) {
synchronized (queueProducers) {
if (queueProducers.size() < settings.getMaxProducers()) {
producer = new JMSQueueProducer();
try {
producer.initialize(settings);
producer.start();
} catch (Exception e) {
throw constructMessageException(e);
}
} else {
producer = queueProducers.removeFirst();
}
queueProducers.addLast(producer);
}
}
try {
if (producer != null)
producer.sendMessage(message);
} catch (JMSException jmsEx) {
// At this point we give up on this producer, so we just
// stop and remove it from the pool.
if (settings.getDestinationType().equals(TOPIC)) {
synchronized (topicProducers) {
if (producer != null) {
producer.stop();
topicProducers.remove(producer);
}
}
} else if (settings.getDestinationType().equals(QUEUE)) {
synchronized (queueProducers) {
if (producer != null) {
producer.stop();
queueProducers.remove(producer);
}
}
}
throw constructMessageException(jmsEx);
}
return null;
}