public Object invoke()

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;
    }