amqp.spring.camel.component.SpringAMQPComponent.java Source code

Java tutorial

Introduction

Here is the source code for amqp.spring.camel.component.SpringAMQPComponent.java

Source

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

package amqp.spring.camel.component;

import java.util.Map;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.impl.DefaultComponent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;

public class SpringAMQPComponent extends DefaultComponent {
    private static transient final Logger LOG = LoggerFactory.getLogger(SpringAMQPComponent.class);

    protected ConnectionFactory connectionFactory;
    protected AmqpTemplate amqpTemplate;
    protected AmqpAdmin amqpAdministration;
    public static final String ROUTING_KEY_HEADER = "ROUTING_KEY";

    public SpringAMQPComponent() {
        this.connectionFactory = new CachingConnectionFactory();
    }

    public SpringAMQPComponent(CamelContext context) {
        super(context);

        //Attempt to load a connection factory from the registry
        if (this.connectionFactory == null) {
            Map<String, ConnectionFactory> factories = context.getRegistry()
                    .findByTypeWithName(ConnectionFactory.class);
            if (factories != null && !factories.isEmpty()) {
                this.connectionFactory = factories.values().iterator().next();
                LOG.info("Found AMQP ConnectionFactory in registry for {}", this.connectionFactory.getHost());
            }
        }

        if (this.connectionFactory == null) {
            LOG.error("Cannot find a connection factory!");
        }
    }

    public SpringAMQPComponent(ConnectionFactory connectionFactory) {
        this.connectionFactory = connectionFactory;
    }

    @Override
    protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters)
            throws Exception {
        SpringAMQPEndpoint endpoint = new SpringAMQPEndpoint(this, uri, remaining, getAmqpTemplate(),
                getAmqpAdministration());
        setProperties(endpoint, parameters);
        return endpoint;
    }

    public ConnectionFactory getConnectionFactory() {
        return connectionFactory;
    }

    public void setConnectionFactory(ConnectionFactory connectionFactory) {
        this.connectionFactory = connectionFactory;
    }

    public AmqpAdmin getAmqpAdministration() {
        if (this.amqpAdministration == null && getCamelContext() != null
                && getCamelContext().getRegistry() != null) {
            //Attempt to load an administration connection from the registry
            Map<String, AmqpAdmin> factories = getCamelContext().getRegistry().findByTypeWithName(AmqpAdmin.class);
            if (factories != null && !factories.isEmpty()) {
                this.amqpAdministration = factories.values().iterator().next();
                LOG.info("Found AMQP Administrator in registry");
            }
        }

        if (this.amqpAdministration == null) {
            //Attempt to construct an AMQP Adminstration instance
            this.amqpAdministration = new RabbitAdmin(this.connectionFactory);
            LOG.info("Created new AMQP Administration instance");
        }

        return this.amqpAdministration;
    }

    public void setAmqpAdministration(AmqpAdmin amqpAdministration) {
        this.amqpAdministration = amqpAdministration;
    }

    public AmqpTemplate getAmqpTemplate() {
        if (this.amqpTemplate == null && getCamelContext() != null && getCamelContext().getRegistry() != null) {
            //Attempt to load an AMQP template from the registry
            Map<String, AmqpTemplate> factories = getCamelContext().getRegistry()
                    .findByTypeWithName(AmqpTemplate.class);
            if (factories != null && !factories.isEmpty()) {
                this.amqpTemplate = factories.values().iterator().next();
                LOG.info("Found AMQP Template in registry");
            }
        }

        if (this.amqpTemplate == null) {
            //Attempt to construct an AMQP template
            this.amqpTemplate = new RabbitTemplate(this.connectionFactory);
            LOG.info("Created new AMQP Template");
        }

        return this.amqpTemplate;
    }

    public void setAmqpTemplate(AmqpTemplate amqpTemplate) {
        this.amqpTemplate = amqpTemplate;
    }

    public static Throwable findRootCause(Throwable t) {
        if (t.getCause() == null)
            return t;
        return findRootCause(t.getCause());
    }
}