org.springframework.util.jms.JmsIntegrationTestUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.springframework.util.jms.JmsIntegrationTestUtils.java

Source

/*
 * Copyright 2011 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.util.jms;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.broker.TransportConnector;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Assert;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.support.converter.obm.MarshallingMessageConverter;
import org.springframework.obm.Marshaller;

/**
 * Supports integration tests with an embedded ActiveMQ instance.
 *
 * @author Josh Long
 */
abstract public class JmsIntegrationTestUtils {

    static private Log log = LogFactory.getLog(JmsIntegrationTestUtils.class);

    /**
     * during the execution of this callback, a JMS broker will be available and the {@link JmsTemplate} required to
     * connect to that JMS broker will be provided as a parameter to this
     * class's {@link JmsBrokerExecutionCallback#doWithActiveMq(org.apache.activemq.broker.BrokerService, org.springframework.jms.core.JmsTemplate)}
     */
    public static interface JmsBrokerExecutionCallback {
        void doWithActiveMq(BrokerService brokerService, JmsTemplate jmsTemplate) throws Throwable;
    }

    public static void startAndConnectToJmsBroker(Class<?> clzzForPayload, Marshaller m,
            JmsBrokerExecutionCallback callback) throws Throwable {
        Assert.assertNotNull("the " + JmsBrokerExecutionCallback.class.getName() + "can not be null", callback);
        String destinationUrl = "tcp://localhost:61617";
        BrokerService broker = new BrokerService();
        TransportConnector connector = broker.addConnector(destinationUrl);
        broker.start();
        while (!broker.isStarted()) {
            Thread.sleep(500);
        }
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(destinationUrl);
        MarshallingMessageConverter converter = new MarshallingMessageConverter(clzzForPayload, m);
        JmsTemplate jmsTemplate = new JmsTemplate(activeMQConnectionFactory);
        converter.setPayloadClass(clzzForPayload);
        jmsTemplate.setMessageConverter(converter);
        jmsTemplate.afterPropertiesSet();

        try {
            callback.doWithActiveMq(broker, jmsTemplate);
        } catch (AssertionError ae) {
            throw ae;
        } catch (Throwable th) {
            if (log.isErrorEnabled()) {
                log.error("execution of jms session failed.", th);
            }
        } finally {
            connector.stop();
            broker.stop();
        }
    }
}