Example usage for org.springframework.integration.handler BridgeHandler setOutputChannel

List of usage examples for org.springframework.integration.handler BridgeHandler setOutputChannel

Introduction

In this page you can find the example usage for org.springframework.integration.handler BridgeHandler setOutputChannel.

Prototype

@Override
    public void setOutputChannel(MessageChannel outputChannel) 

Source Link

Usage

From source file:org.grails.plugin.platform.events.registry.SpringIntegrationEventsRegistry.java

private void initServiceActivatingHandler(ServiceActivatingHandler serviceActivatingHandler,
        ListenerId listener, String topic) {
    if (topic == null || topic.isEmpty()) {
        throw new RuntimeException("topic name must not be null or empty");
    }/*from  ww  w.j a  v  a 2s.  c  om*/

    String callBackId = listener.toString();
    serviceActivatingHandler.setBeanName(callBackId);
    serviceActivatingHandler.setChannelResolver(resolver);
    serviceActivatingHandler.setRequiresReply(true);
    serviceActivatingHandler.setOutputChannel(outputChannel);
    String beanIdBase = listener.getClassName();
    int counter = 0;
    String beanId;

    do {
        counter++;
        beanId = beanIdBase + BeanDefinitionReaderUtils.GENERATED_BEAN_NAME_SEPARATOR + counter;
    } while (beanFactory.containsBean(beanId));

    beanFactory.registerSingleton(beanId, serviceActivatingHandler);
    serviceActivatingHandler.afterPropertiesSet();

    SubscribableChannel bridgeChannel = null;
    SubscribableChannel channel = null;
    String channelName = listener.getTopic();

    try {
        bridgeChannel = ctx.getBean(channelName, SubscribableChannel.class);
    } catch (BeansException be) {
        log.debug("no overriding/existing channel found " + be.getMessage());
    }

    if (bridgeChannel == null
            || !bridgeChannel.getClass().isAssignableFrom(GrailsPublishSubscribeChannel.class)) {
        if (bridgeChannel != null) {
            channelName += "-plugin";
        }
        channel = createChannel(channelName);
    } else {
        channel = bridgeChannel;
    }

    channel.subscribe(serviceActivatingHandler);

    if (bridgeChannel != null
            && !bridgeChannel.getClass().isAssignableFrom(GrailsPublishSubscribeChannel.class)) {
        BridgeHandler bridgeHandler = new BridgeHandler();
        bridgeHandler.setOutputChannel(channel);
        bridgeChannel.subscribe(bridgeHandler);
    }

}

From source file:org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.java

/**
 * Register an error channel for the destination when an async send error is received.
 * Bridge the channel to the global error channel (if present).
 * @param destination the destination.//from w  ww  . j  a  va 2s.c om
 * @return the channel.
 */
private SubscribableChannel registerErrorInfrastructure(ProducerDestination destination) {
    ConfigurableListableBeanFactory beanFactory = getApplicationContext().getBeanFactory();
    String errorChannelName = errorsBaseName(destination);
    SubscribableChannel errorChannel = null;
    if (getApplicationContext().containsBean(errorChannelName)) {
        Object errorChannelObject = getApplicationContext().getBean(errorChannelName);
        if (!(errorChannelObject instanceof SubscribableChannel)) {
            throw new IllegalStateException(
                    "Error channel '" + errorChannelName + "' must be a SubscribableChannel");
        }
        errorChannel = (SubscribableChannel) errorChannelObject;
    } else {
        errorChannel = new PublishSubscribeChannel();
        beanFactory.registerSingleton(errorChannelName, errorChannel);
        errorChannel = (PublishSubscribeChannel) beanFactory.initializeBean(errorChannel, errorChannelName);
    }
    MessageChannel defaultErrorChannel = null;
    if (getApplicationContext().containsBean(IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME)) {
        defaultErrorChannel = getApplicationContext().getBean(IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME,
                MessageChannel.class);
    }
    if (defaultErrorChannel != null) {
        BridgeHandler errorBridge = new BridgeHandler();
        errorBridge.setOutputChannel(defaultErrorChannel);
        errorChannel.subscribe(errorBridge);
        String errorBridgeHandlerName = getErrorBridgeName(destination);
        beanFactory.registerSingleton(errorBridgeHandlerName, errorBridge);
        beanFactory.initializeBean(errorBridge, errorBridgeHandlerName);
    }
    return errorChannel;
}

From source file:org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.java

/**
 * Build an errorChannelRecoverer that writes to a pub/sub channel for the destination
 * when an exception is thrown to a consumer.
 * @param destination the destination.//  ww  w . j  av a2s  .c o  m
 * @param group the group.
 * @param consumerProperties the properties.
 * @param true if this is for a polled consumer.
 * @return the ErrorInfrastructure which is a holder for the error channel, the recoverer and the
 * message handler that is subscribed to the channel.
 */
protected final ErrorInfrastructure registerErrorInfrastructure(ConsumerDestination destination, String group,
        C consumerProperties, boolean polled) {

    ErrorMessageStrategy errorMessageStrategy = getErrorMessageStrategy();
    ConfigurableListableBeanFactory beanFactory = getApplicationContext().getBeanFactory();
    String errorChannelName = errorsBaseName(destination, group, consumerProperties);
    SubscribableChannel errorChannel = null;
    if (getApplicationContext().containsBean(errorChannelName)) {
        Object errorChannelObject = getApplicationContext().getBean(errorChannelName);
        if (!(errorChannelObject instanceof SubscribableChannel)) {
            throw new IllegalStateException(
                    "Error channel '" + errorChannelName + "' must be a SubscribableChannel");
        }
        errorChannel = (SubscribableChannel) errorChannelObject;
    } else {
        errorChannel = new BinderErrorChannel();
        beanFactory.registerSingleton(errorChannelName, errorChannel);
        errorChannel = (LastSubscriberAwareChannel) beanFactory.initializeBean(errorChannel, errorChannelName);
    }
    ErrorMessageSendingRecoverer recoverer;
    if (errorMessageStrategy == null) {
        recoverer = new ErrorMessageSendingRecoverer(errorChannel);
    } else {
        recoverer = new ErrorMessageSendingRecoverer(errorChannel, errorMessageStrategy);
    }
    String recovererBeanName = getErrorRecovererName(destination, group, consumerProperties);
    beanFactory.registerSingleton(recovererBeanName, recoverer);
    beanFactory.initializeBean(recoverer, recovererBeanName);
    MessageHandler handler;
    if (polled) {
        handler = getPolledConsumerErrorMessageHandler(destination, group, consumerProperties);
    } else {
        handler = getErrorMessageHandler(destination, group, consumerProperties);
    }
    MessageChannel defaultErrorChannel = null;
    if (getApplicationContext().containsBean(IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME)) {
        defaultErrorChannel = getApplicationContext().getBean(IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME,
                MessageChannel.class);
    }
    if (handler == null && errorChannel instanceof LastSubscriberAwareChannel) {
        handler = getDefaultErrorMessageHandler((LastSubscriberAwareChannel) errorChannel,
                defaultErrorChannel != null);
    }
    String errorMessageHandlerName = getErrorMessageHandlerName(destination, group, consumerProperties);
    if (handler != null) {
        beanFactory.registerSingleton(errorMessageHandlerName, handler);
        beanFactory.initializeBean(handler, errorMessageHandlerName);
        errorChannel.subscribe(handler);
    }
    if (defaultErrorChannel != null) {
        BridgeHandler errorBridge = new BridgeHandler();
        errorBridge.setOutputChannel(defaultErrorChannel);
        errorChannel.subscribe(errorBridge);
        String errorBridgeHandlerName = getErrorBridgeName(destination, group, consumerProperties);
        beanFactory.registerSingleton(errorBridgeHandlerName, errorBridge);
        beanFactory.initializeBean(errorBridge, errorBridgeHandlerName);
    }
    return new ErrorInfrastructure(errorChannel, recoverer, handler);
}

From source file:org.springframework.integration.flow.config.FlowUtils.java

/**
 * Create a bridge//from w  ww  . j  a v  a2s  .com
 * 
 * @param inputChannel
 * @param outputChannel
 */

public static void bridgeChannels(SubscribableChannel inputChannel, MessageChannel outputChannel) {
    BridgeHandler bridgeHandler = new BridgeHandler();
    bridgeHandler.setOutputChannel(outputChannel);
    inputChannel.subscribe(bridgeHandler);
}

From source file:org.springframework.xd.module.CompositeModule.java

@Override
public void initialize() {
    List<AbstractEndpoint> endpoints = new ArrayList<AbstractEndpoint>();
    MessageChannel previousOutputChannel = null;
    for (int i = 0; i < this.modules.size(); i++) {
        SimpleModule module = this.modules.get(i);
        module.initialize();/*w  ww .j a  v a 2 s.com*/
        MessageChannel inputChannel = module.getComponent("input", MessageChannel.class);
        MessageChannel outputChannel = module.getComponent("output", MessageChannel.class);
        if (i == 0 && inputChannel != null) {
            // this will act as THE input for the composite module
            // if the first module has no input, the composite is a source
            this.context.getBeanFactory().registerSingleton("input", inputChannel);
        }
        if (i > 0) {
            // first module MAY have 'input', all others MUST
            Assert.notNull(inputChannel, "each module after the first must provide 'input'");
        }
        if (previousOutputChannel != null) {
            BridgeHandler handler = new BridgeHandler();
            handler.setOutputChannel(inputChannel);
            handler.afterPropertiesSet();
            ConsumerEndpointFactoryBean bridgeFactoryBean = new ConsumerEndpointFactoryBean();
            bridgeFactoryBean.setInputChannel(previousOutputChannel);
            bridgeFactoryBean.setHandler(handler);
            try {
                // TODO: might not be necessary to pass this context, but the FB requires non-null
                bridgeFactoryBean.setBeanFactory(this.context.getBeanFactory());
                bridgeFactoryBean.afterPropertiesSet();
                AbstractEndpoint endpoint = bridgeFactoryBean.getObject();
                endpoints.add(endpoint);
                this.context.getBeanFactory().registerSingleton("bridge-" + i, endpoint);
            } catch (Exception e) {
                throw new IllegalStateException("failed to start bridge for CompositeModule", e);
            }
        }
        if (i < this.modules.size() - 1) {
            // last module MAY have 'output', all others MUST
            Assert.notNull(outputChannel, "each module before the last must provide 'output'");
        }
        previousOutputChannel = outputChannel;
        if (i == this.modules.size() - 1 && outputChannel != null) {
            // this will act as THE output for the composite module
            // if the final module has no outputChannel, the composite is a sink
            this.context.getBeanFactory().registerSingleton("output", outputChannel);
        }
    }
    for (int i = endpoints.size() - 1; i >= 0; i--) {
        endpoints.get(i).start();
    }
    initContext();
    if (logger.isInfoEnabled()) {
        logger.info("initialized module: " + this.toString());
    }
}

From source file:org.springframework.xd.module.core.CompositeModule.java

@Override
public void initialize() {
    List<AbstractEndpoint> endpoints = new ArrayList<AbstractEndpoint>();
    MessageChannel previousOutputChannel = null;
    for (int i = 0; i < this.modules.size(); i++) {
        Module module = this.modules.get(i);
        module.initialize();/*from  w  w  w.  j  ava 2 s. c  om*/
        MessageChannel inputChannel = module.getComponent("input", MessageChannel.class);
        MessageChannel outputChannel = module.getComponent("output", MessageChannel.class);
        if (i == 0 && inputChannel != null) {
            // this will act as THE input for the composite module
            // if the first module has no input, the composite is a source
            this.context.getBeanFactory().registerSingleton("input", inputChannel);
        }
        if (i > 0) {
            // first module MAY have 'input', all others MUST
            Assert.notNull(inputChannel, "each module after the first must provide 'input'");
        }
        if (previousOutputChannel != null) {
            BridgeHandler handler = new BridgeHandler();
            handler.setBeanFactory(this.context.getBeanFactory());
            handler.setOutputChannel(inputChannel);
            handler.afterPropertiesSet();
            ConsumerEndpointFactoryBean bridgeFactoryBean = new ConsumerEndpointFactoryBean();
            bridgeFactoryBean.setInputChannel(previousOutputChannel);
            bridgeFactoryBean.setHandler(handler);
            try {
                // TODO: might not be necessary to pass this context, but the FB requires non-null
                bridgeFactoryBean.setBeanFactory(this.context.getBeanFactory());
                bridgeFactoryBean.afterPropertiesSet();
                AbstractEndpoint endpoint = bridgeFactoryBean.getObject();
                endpoints.add(endpoint);
                this.context.getBeanFactory().registerSingleton("bridge-" + i, endpoint);
                endpoint.setComponentName("bridge-" + i);
                endpoint.afterPropertiesSet();
            } catch (Exception e) {
                throw new IllegalStateException("failed to start bridge for CompositeModule", e);
            }
        }
        if (i < this.modules.size() - 1) {
            // last module MAY have 'output', all others MUST
            Assert.notNull(outputChannel, "each module before the last must provide 'output'");
        }
        previousOutputChannel = outputChannel;
        if (i == this.modules.size() - 1 && outputChannel != null) {
            // this will act as THE output for the composite module
            // if the final module has no outputChannel, the composite is a sink
            this.context.getBeanFactory().registerSingleton("output", outputChannel);
        }
    }
    for (int i = endpoints.size() - 1; i >= 0; i--) {
        endpoints.get(i).start();
    }
    initContext();
    if (logger.isInfoEnabled()) {
        logger.info("initialized module: " + this.toString());
    }
}