This example uses Spring Integration to process a book order and appropriately route the message depending on if it's a pickup from the store or it should be delivered. Spring Integration is an implementation of Enterprise Integration Patterns.
Order gateway, the
BookOrder is sent to the 'processOrder' channel.
OrderRouter routes the order either to the 'pickup' or 'delivery' channels based
on the order's
OrderType annotation. If the order is a pickup, the 'pickup' channel
is bridged to the 'store' channel which is configured to have the
do the final processing for this part of the flow. If the order is a delivery, the
BookOrder into an
OnlineBookOrder that contains the delivery address.
The address is just hard coded in the example, but could have looked up an address in a real application.
The online order is sent to the 'post' channel, which is configured to have the
handle the end of this part of the flow.
processOrder | OrderRouter / \ pickup delivery | | store DeliveryTranformer | post
This configuration uses a combination of XML and classes with annotations to configure the message flow.
The annotation-config element enables annotation-based configuration for
The context:component-scan loads the annotated part of the configuration.
The gateway element creates the
Order gateway, which is the
beginning of the flow. Different channels are created, a bridge between two channels using the
bridge element, and the outbound-channel-adapter is
used to configure an endpoint for the 'store' and 'post' channels.
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/integration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:stream="http://www.springframework.org/schema/integration/stream" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-2.2.xsd http://www.springframework.org/schema/integration/stream http://www.springframework.org/schema/integration/stream/spring-integration-stream-2.2.xsd"> <!-- processOrder | OrderRouter / \ pickup delivery | | store DeliveryTranformer | post --> <annotation-config/> <context:component-scan base-package="org.springbyexample.integration.book.annotation"/> <gateway id="order" service-interface="org.springbyexample.integration.book.Order"/> <channel id="processOrder"/> <channel id="delivery"/> <channel id="pickup"/> <bridge input-channel="pickup" output-channel="store" /> <channel id="store"/> <channel id="post"/> <outbound-channel-adapter channel="store" ref="storeEndpoint" method="processMessage" /> <outbound-channel-adapter channel="post" ref="postEndpoint" method="processMessage" /> </beans:beans>