Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
(Oleg zhurakousky)spring integration-scala-intro
1. Enterprise Integration Patterns
using
Scala and Spring Integration
Oleg Zhurakousky
SpringSource/VMware
Twitter: z_oleg
Email: ozhurakousky@vmware.com
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit
3. Messaging
• Integration starts with Messaging
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 3
4. Why Messaging?
• Logical Decoupling
• Physical Decoupling
– Producer and Consumer are not aware of one
another
• Easy to extend
• Event-driven
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 4
5. Pipes and Filters
– Endpoints (Filters) connected through
– Channels (Pipes) exchanging
– Message
$> cat foo.txt | grep the | while read l; do echo $l ; done
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 5
6. Message
• Payload can be any object
• Header values are stored in a Map
Headers
Payload
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 6
7. Message Channel
• Decouples Producers from Consumers
• Provides extension point for interceptors
• May be Point-to-Point
• Or Publish/Subscribe
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 7
8. Message Endpoint
• Producers send Messages to a Message
Channel
• Depending on their type, Message Channels
may have Polling Consumers
• Or Event-Driven Consumers
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 8
9. Message Endpoint Types
• Transformer
– Convert payload or modify headers
• Filter
– Discard messages based on boolean evaluation
• Router
– Determine next channel based on content
• Splitter
– Generate multiple messages from one
• Aggregator
– Assemble a single message from multiple
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 9
10. What is Spring Integration?
• Framework is a reference implementation
of Enterprise Integration Patterns
• Built on top of Spring
– Runs within any Spring ApplicationContext
– All components are Spring-managed objects
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 10
11. The Big Picture
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 11
12. Spring Programming Model
• Inversion of Control
– Endpoints delegate to Spring-managed objects
– Framework handles message reception and
method invocation
• Clean separation of Code and Configuration
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 12
13. Message Channel Types
<channel id="sync-p2p"/>
<channel id="async-p2p">
<dispatcher task-executor="someThreadPool" />
</channel>
<channel id="async-buffering-p2p">
<queue capacity="50" />
</channel>
<publish-subscribe-channel id="sync-pubsub" />
<publish-subscribe-channel id="async-pubsub"
task-executor="someThreadPool" />
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 13
17. Where does Scala fit in?
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit
18. Why Scala?
• There are 2 types of people in this world
– Like to say - "Don't like XML"
– "Don't like XML" - but understand that its
necessary evil. Appreciate alternatives but
not overly concerned with the lack of.
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 18
19. Is XML or not to XML enough of an
argument?
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit
20. Why Scala? (cont. . .)
• True Type Safety vs IDE-Specific support
• Typos and misconfiguration
• Adding value based on the language features
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 20
21. Welcome to SI Scala DSL
val messageFlow =
filter.using{p:String => p.equals("Cool World")} -->
transform.using{p:String => "Goodbye " + p} -->
handle.using{p:String => println(p)}
messageFlow.sendAndReceive[String]("Cool World")
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 21
22. Welcome to SI Scala DSL
• Compile time validation vs initialization
validation and type safety:
filter.using{p:String => "Cool World"} - (filter can *only* return Boolean)
type mismatch; found : String => java.lang.String required: Function1[_, Boolean]
transform.using{p:String => println} - (transformer *must* return non-Unit value)
handle.using{p:String => println(p)} -->
handle.using{p:String => println(p)}
- value --> is not a member of o.s.i.d.SendingIntegrationComposition
(the first handler returns Unit (nothing of value in Messaging terms therefore the flow
can't continue)
Etc. . .
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 22
23. Relevant Info
• Enterprise Integration Patterns - http://www.eaipatterns.com/
• Spring Integration project home -
http://www.springsource.org/spring-integration
• Spring Integration Scala DSL home -
https://github.com/SpringSource/spring-integration-scala/wiki
• Spring Integration Scala DSL blog -
http://blog.springsource.org/2012/03/05/introducing-spring-integration-
Copyright 2005-2010 SpringSource. Copying, publishing or distributing without express written permission is prohibit 23