Your SlideShare is downloading. ×
  • Like
«Spring Integration as Integration Patterns Provider»
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

«Spring Integration as Integration Patterns Provider»

  • 190 views
Published

by Vyacheslav Blinnov

by Vyacheslav Blinnov

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
190
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
7
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Spring Integration as Integration Patterns provider Blynov Viacheslav Dnepropetrovsk 24 June 2014
  • 2. 224 June 2014
  • 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
  • 6. 624 June 2014 Main Components
  • 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.
  • 16. 1624 June 2014 Example
  • 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
  • 18. 18 Spring Integration Example 24 June 2014  We need to add the following dependencies in pom.xml
  • 19. 19 Spring Integration Example 24 June 2014  Specify JMS connection factory
  • 20. 20 Spring Integration Example 24 June 2014  Configure Spring Integration context
  • 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)
  • 28. 28 Spring Integration Example 24 June 2014 Receiving messages via HTTP REST
  • 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
  • 33. 33 Problem Spring Integration Example 24 June 2014 The incoming messages could arrive very frequently
  • 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
  • 40. 4024 June 2014 Spring Integration VS Apache Camel
  • 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
  • 44. 4424 June 2014 Questions?