The document discusses Spring Integration, an open-source framework for enterprise application integration. It provides goals, features, main components and examples of Spring Integration. Some key points:
- Spring Integration aims to provide a simple model for complex integration solutions and facilitate asynchronous, message-driven behavior within Spring applications.
- It implements most Enterprise Integration Patterns and supports integration with various external systems like HTTP, FTP, JMS.
- Main components include messages, channels, endpoints like transformers, filters, routers.
- Examples demonstrate receiving JMS messages, extracting data, routing/aggregating messages, and sending results to another queue.
- Compared to Apache Camel, Spring Integration uses only XML configuration while
3. 3
Spring Integration Goals
Provide a simple model for implementing complex enterprise integration
solutions.
Facilitate asynchronous, message-driven behavior within a Spring-based
application.
Promote intuitive, incremental adoption for existing Spring users.
Spring Integration Introduction
24 June 2014
4. 4
Spring Integration Features
Implementation of most of the Enterprise Integration Patterns
– Endpoint
– Channel
– Aggregator
– Filter
– …
Integration with External Systems
– REST/HTTP
– FTP
– Twitter
– JMS
– …
The framework has extensive JMX support
– exposing framework components as MBeans
– adapters to obtain attributes from MBeans, invoke operations, send/receive notifications
Spring Integration Introduction
24 June 2014
5. 5
Spring Integration Endpoints
AMQP
Spring Application Events
File System
FTP
Gemfire
HTTP/REST
JDBC
JMX
JPA
Mail
MongoDB
Redis
RMI
TCP
Twitter
UDP
XMPP
Spring Integration Introduction
24 June 2014
7. 7
Main Components
Message
Message Channel
Message Endpoint
– Transformer
– Filter
– Router
– Splitter
– Aggregator
– Service Activator
– Channel Adapter
– Gateway
Spring Integration Main Components
24 June 2014
8. 8
Spring Integration Main Components
24 June 2014
Message
Message is a generic wrapper
for any Java object combined
with metadata used by the
framework while handling that
object
9. 9
Spring Integration Main Components
24 June 2014
Message Channel
Point-To-Point Channel
Publish/Subscribe Channel
Pollable Channels
Message-Driven Channels
10. 10
Spring Integration Main Components
24 June 2014
Message Endpoint
Encapsulates communication-
specific details:
converts/extracts business data
to/from message
sends/receives messages
to/from message channel
11. 11
Spring Integration Main Components
24 June 2014
Transformer
Message Transformer is
responsible for converting a
Message's content or structure
and returning the modified
Message
12. 12
Spring Integration Main Components
24 June 2014
Filter
Message Filter determines
whether a Message should be
passed to an output channel at
all
13. 13
Spring Integration Main Components
24 June 2014
Splitter
Splitter is another type of
Message Endpoint whose
responsibility is to accept a
Message from its input channel,
split that Message into multiple
Messages, and then send each
of those to its output channel.
14. 14
Spring Integration Main Components
24 June 2014
Service Activator
Service Activator is a generic endpoint for connecting a service
instance to the messaging system.
The input Message Channel must be configured, and if the service
method to be invoked is capable of returning a value, an output
Message Channel may also be provided.
15. 15
Spring Integration Main Components
24 June 2014
Gateway
The Gateway encapsulates messaging-specific code (e.g.,
the code required to send or receive a message) and separates it
from the rest of the application code. The Messaging
Gateway exposes a business function to the rest of the application
so that instead of requiring the application to set properties like
Message.
17. 17
Task
We receive JMS messages with some CompoundObject in JSON format
CompoundObject is-a list of some Objects
We need to extract all Objects from CompoundObject and save them to database
(possibly performing some other business logic)
Those Objects which are considered “good” (verified against some rule) should
be sent via JMS to another queue in JSON format
Spring Integration Example
24 June 2014
21. 21
Spring Integration Example
24 June 2014
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String
payload)
22. 22
Spring Integration Example
24 June 2014
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String
payload)
List<ObjectDTO> splitCompound(CompObjectDTO dto)
23. 23
Spring Integration Example
24 June 2014
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String
payload)
List<ObjectDTO> splitCompound(CompObjectDTO dto)
Object convertToEntity(ObjectDTO dto)
24. 24
Spring Integration Example
24 June 2014
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String
payload)
List<ObjectDTO> splitCompound(CompObjectDTO dto)
Object convertToEntity(ObjectDTO dto)
Object saveEntity(Object obj)
25. 25
Spring Integration Example
24 June 2014
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String
payload)
List<ObjectDTO> splitCompound(CompObjectDTO dto)
Object convertToEntity(ObjectDTO dto)
Object saveEntity(Object obj)
boolean isGoodObject(Object obj)
26. 26
Spring Integration Example
24 June 2014
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String
payload)
List<ObjectDTO> splitCompound(CompObjectDTO dto)
Object convertToEntity(ObjectDTO dto)
Object saveEntity(Object obj)
boolean isGoodObject(Object obj)
ObjectDTO convertToDTO(Object obj)
27. 27
Spring Integration Example
24 June 2014
Configure Spring Integration context
CompObjectDTO parseCompoundObject(String
payload)
List<ObjectDTO> splitCompound(CompObjectDTO dto)
Object convertToEntity(ObjectDTO dto)
Object saveEntity(Object obj)
boolean isGoodObject(Object obj)
ObjectDTO convertToDTO(Object obj)
String serializeObjectDTO(ObjectDTO obj)
29. 29
Another option: JMS backed message channels
Channel adapter are intended for applications that are integrating with
other external systems. There are cases where both the producer and consumer
for a given JMS Destination are intended to be part of the same application,
running within the same process.
<int-jms:channel id="jmsChannel" queue="exampleQueue"/>
<int-jms:publish-subscribe-channel id="jmsChannel" topic="exampleTopic"/>
Support of transactions (“transaction-manager” atrribute)
Support for connection (session, consumer) cache
Concurrency (number of concurrent sessions/consumers to start for each listener)
Spring Integration Example
24 June 2014
30. 30
Task 2
An exteranl system feeds us with stream of JSON objects putting them to JMS
queue
We need to make some calculations (business logic) using these objects in the
order as they come
Depending on calculationd results we could change the persistent state of our
domain objects
Incoming objects should be saved to our DB
Finally, the results of calculation should be sent in JSON format to another JMS
queue
Spring Integration Example
24 June 2014
31. 31
Basic Flow
Spring Integration Example
24 June 2014
Receive objects
Validation
convertion to entity
Calculation
Analyze and save
results
Send to outbound
JMS
Save entities to DB
32. 32
Router
Spring Integration Example
24 June 2014
• Payload Type Router
• Header Value Router
• Recipient List Router
• XPath Router (Part of the XML Module)
• Error Message Exception Type Router
• (Generic) Router
34. 34
Aggregator
Spring Integration Example
24 June 2014
• Message Store
• Correlation Strategy (delaults to grouping be MessageHeader.CORRELATION_ID)
• Release Strategy
• Expiration policy
35. 35
Back to task 2: receive and aggregate
Spring Integration Example
24 June 2014
36. 36
Back to task 2: receive and aggregate
Spring Integration Example
24 June 2014
boolean canReleaseMessages(List<IncObject>)
List<IncObject> aggregate(List<IncObject>)
Object getCorrelationKey(IncObject)
37. 37
Back to task 2: routing
Spring Integration Example
24 June 2014
38. 38
Back to task 2: via publish-subscribe channel
Spring Integration Example
24 June 2014
39. 39
Task summary
Built on the top of other Spring modules (e. g. Spring JMS)
Every element of the chain – just a simple POJO
High cohesion
Easy to cover with unit-tests
“Convention over configuration” – bean with name “connectionFactory” will be
found automatically
Change the whole business flow only by configuration
Spring Integration Example
24 June 2014
41. 41
Both projects aim to fill similar need: light-weight integration library with full
implementations of EIP
Apache Camel introduces DSL (Java, Scala, Groovy). Spring Integration - only
XML
Apache Camel supports longer list of technologies
Apache Camel offers rich support for both integration and unit-testing. Spring
Integration supports just generic Spring Test
Apache Camel Community is larger, documentation is better
Spring Integration Spring Integration VS Apache Camel
24 June 2014
42. 42
Apache Camel Java DSL Example
final JaxbDataFormat jaxbDataFormat = new JaxbDataFormat();
jaxbDataFormat.setContextPath(“test.ns.oxm");
jaxbDataFormat.setPartClass(“test.ns.oxm.ABSPartnerChangesEventType");
from("activemq:incoming.partner")
.log("log:test.log")
.choice() .when(header("EVENTTYPE").isEqualTo(“TESTVALUE")).to("direct:createPartner“)
.when(header("EVENTTYPE").isEqualTo(“TESTVALUE2")).to("direct:updatePartner");
from("direct:createPartner")
.errorHandler(noErrorHandler())
.unmarshal(jaxbDataFormat)
.beanRef(“partnerChangeHandler", "createPartner");
from("direct:updatePartner")
.errorHandler(noErrorHandler())
.unmarshal(jaxbDataFormat)
.beanRef(“partnerChangeHandler", "updatePartner");
Spring Integration Spring Integration VS Apache Camel
24 June 2014
43. 43
Recent changes
Spring EL support (3.0.2)
HTTP request mapping (based on Spring MVC infrastructure) (3.0.2)
Enhanced support for MongoDB, Redis and JPA (3.0.2)
@EnableIntegration, @IntegrationComponentScan (4.0.2)
Requires Spring 4.0 (4.0.2)
Spring Integration Example
24 June 2014