SlideShare a Scribd company logo
Styles of Application Integration
    Using Spring
    Bruce Snyder, Senior Software Engineer, SpringSource/VMware




Friday, July 15, 2011
Integrations Are About Coupling




                                      2

Friday, July 15, 2011
Where Coupling Exists, Concerns Arise

    • Tight coupling is easy
    • Loose coupling can be difficult

    • Tight coupling causes issues in the long run
    • Loose coupling pays off in the long run

    • Integrations are usually tightly coupled
    • Integrations should be loosely coupled

    • Integrations are commonly addressed using commands
    • Integrations should be addressed using events


Friday, July 15, 2011
What is Coupling?

           “... the degree to which each program module relies
           on each one of the other modules”
           (Wikipedia.com)



    • Given two lines of code, A and B, they are coupled when B
      must change behavior only because A changed




                                                                 4

Friday, July 15, 2011
Characteristics Tight Coupling

    •    Components are highly dependent upon one another
    •    Components are directly linked
    •    Changes in one component cause a ripple effect
    •    Less reusability
    •    More difficult to maintain
    •    Does not handle unforeseen change well

    • Examples
          – Clients designed to interact only with specific systems
          – Use of proprietary APIs or commands for interaction
          – Components designed to work specifically with other
            components
                                                                      5

Friday, July 15, 2011
Characteristics of Loose Coupling

    •    Components have little or no knowledge of one another
    •    Components are not directly linked to one another
    •    Changes in one component do not affect other components
    •    Increased reusability
    •    Easier to maintain
    •    More easily handles unforeseen changes

    • Examples
          – Dependence upon interfaces instead of concrete classes
          – Use of DI encourages looser coupling
          – A design using a level of indirection


                                                                     6

Friday, July 15, 2011
Tight Coupling is Easy

    •    App design with tight coupling is more widely understood
    •    App development with tight coupling requires less time
    •    Debugging a tightly coupled app is easier
    •    Benefits of tight coupling are seen immediately
    •    Tightly coupled prototypes commonly live on




                                                                    7

Friday, July 15, 2011
Loose Coupling is Difficult

    • App design with loose coupling is not widely understood
    • App development with loosely coupling requires more
      thought and more time
    • Debugging loosely coupled apps is different
    • Benefits of loose coupling are only seen over time




                                                                8

Friday, July 15, 2011
Integrations and Coupling

    • But it’s easy to write a point-to-point, one-off piece of code
      for integration!
    • Too many disadvantages
          –    Difficult to maintain
          –    No reusability
          –    Every integration is unique
          –    Bites you over time




                                                                  9

Friday, July 15, 2011
Integrations and Coupling

    • But designing integrations to be loosely coupled requires
      too much work!
    • With the right knowledge and preparation, it doesn’t need
      to be this way




                                                              10

Friday, July 15, 2011
Commands vs. Events

    • Commands are not natural
          – Verify credit card
    • Commands are too specific

    • Events are natural
          – Order received
    • Events are more broad
    • Events are what happen in the real world




                                                 11

Friday, July 15, 2011
Enterprise Integration Patterns (EIP)




                        http://enterpriseintegrationpatterns.com/
                                                                    12

Friday, July 15, 2011
Spring Integration

    • Provides both concurrency and messaging
          – Message Endpoints
                 • Connections between services
          – Channel Adapters
                 • Adapter between application and message broker
          – Messaging Gateways
                 • Provides uni-directional or bi-directional messaging
          – Service Activators
                 • Invokes a services based on an incoming message
          – Routers
                 • Determines where to dispatch a message
          – Splitters and Aggregators
                 • Breaks up a message and reassembles it after processing

                                                                             13

Friday, July 15, 2011
Spring Integration

    • Supports
          –    AMQP
          –    Email
          –    File system
          –    Gemfire
          –    JMS
          –    JMX
          –    MongoDB
          –    Redis
          –    Spring Batch
          –    Testing
          –    Web Services

                              14

Friday, July 15, 2011
Spring Integration




                         15

Friday, July 15, 2011
Spring Integration




                         16

Friday, July 15, 2011
Spring Integration




                         17

Friday, July 15, 2011
Spring Integration




                         18

Friday, July 15, 2011
Spring Integration




                         19

Friday, July 15, 2011
Spring Integration




                         20

Friday, July 15, 2011
Spring Integration




                         21

Friday, July 15, 2011
Spring Integration




                         22

Friday, July 15, 2011
Spring Integration




                         23

Friday, July 15, 2011
Spring Integration




                         24

Friday, July 15, 2011
Types of Integration

    • Intra-application integration
    • Inter-application integration
    • External system integration




                                      25

Friday, July 15, 2011
Typical Application Layers




                                 26

Friday, July 15, 2011
Intra-Application Integration




                                    27

Friday, July 15, 2011
Spring Integration Config



   <int:gateway id="sender"
     service-interface="org.bsnyder.spring.integration.simple.Sender"/>

   <int:channel id="orderReceived"/>

   <int:service-activator input-channel="orderReceived" ref="receiver"
   method="receive" />

   <bean id="receiver" class="org.bsnyder.spring.integration.simple.Receiver"/>




                                                                                  28

Friday, July 15, 2011
Intra-Application Integration




                                    29

Friday, July 15, 2011
Spring Integration Config
   <int:gateway id="sender"
     service-interface="org.bsnyder.spring.integration.appa.Sender"/>

   <channel id="orderReceived" />

   <amqp:outbound-channel-adapter channel="orderReceived"
     exchange-name="order.received.exchange"
     routing-key="order.received.binding"
     amqp-template="amqpTemplate" />


   <rabbit:connection-factory id="connectionFactory" />
   <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />
   <rabbit:admin connection-factory="connectionFactory" />
   <rabbit:queue name="order.received.queue" />
   <rabbit:direct-exchange name="order.received.exchange">
      <rabbit:bindings>
      <rabbit:binding queue="order.received.queue" key="order.received.binding" />
      </rabbit:bindings>
   </rabbit:direct-exchange>


                                                                                     30

Friday, July 15, 2011
Spring Integration Config

   <amqp:inbound-channel-adapter channel="orderReceived"
     queue-names="order.received.queue"
     connection-factory="connectionFactory" />

   <int:service-activator input-channel="orderReceived" ref="receiver"
   method="receive" />

   <bean id="receiver" class="org.bsnyder.spring.integration.appa.Receiver"/>


   <rabbit:connection-factory id="connectionFactory" />
   <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />
   <rabbit:admin connection-factory="connectionFactory" />
   <rabbit:queue name="order.received.queue" />
   <rabbit:direct-exchange name="order.received.exchange">
      <rabbit:bindings>
      <rabbit:binding queue="order.received.queue" key="order.received.binding" />
      </rabbit:bindings>
   </rabbit:direct-exchange>


                                                                                     31

Friday, July 15, 2011
32

Friday, July 15, 2011
Inter-Application Integration




                                    33

Friday, July 15, 2011
Inter-Application Integration




                                    34

Friday, July 15, 2011
Spring Integration Config
   <int:gateway id="sender"
     service-interface="org.bsnyder.spring.integration.appa.Sender"/>

   <channel id="orderReceived" />

   <amqp:outbound-channel-adapter channel="orderReceived"
     exchange-name="order.received.exchange"
     routing-key="order.received.binding"
     amqp-template="amqpTemplate" />


   <rabbit:connection-factory id="connectionFactory" />
   <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />
   <rabbit:admin connection-factory="connectionFactory" />
   <rabbit:queue name="order.received.queue" />
   <rabbit:direct-exchange name="order.received.exchange">
      <rabbit:bindings>
      <rabbit:binding queue="order.received.queue" key="order.received.binding" />
      </rabbit:bindings>
   </rabbit:direct-exchange>


                                                                                     35

Friday, July 15, 2011
Spring Integration Config

   <amqp:inbound-channel-adapter channel="orderReceived"
     queue-names="order.received.queue"
     connection-factory="connectionFactory" />

   <int:service-activator input-channel="orderReceived" ref="receiver"
   method="receive" />

   <bean id="receiver" class="org.bsnyder.spring.integration.appb.Receiver"/>


   <rabbit:connection-factory id="connectionFactory" />
   <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />
   <rabbit:admin connection-factory="connectionFactory" />
   <rabbit:queue name="order.received.queue" />
   <rabbit:direct-exchange name="order.received.exchange">
      <rabbit:bindings>
      <rabbit:binding queue="order.received.queue" key="order.received.binding" />
      </rabbit:bindings>
   </rabbit:direct-exchange>


                                                                                     36

Friday, July 15, 2011
37

Friday, July 15, 2011
External System Integration




                                  38

Friday, July 15, 2011
Spring Integration Config


   <int:gateway id="sender"
     service-interface="org.bsnyder.spring.integration.appa.Sender"/>


   <bean id="ftpClientFactory"
   class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory"
     p:host" value="localhost" p:username" value="${user}" p:password="$
   {password}"/>
   !
   <int:channel id="ftpChannel"/>

   <int-ftp:outbound-channel-adapter id="ftpOutbound"
     channel="ftpChannel"
     remote-directory="/foo/bar/baz/"
     client-factory="ftpClientFactory"/>




                                                                                  39

Friday, July 15, 2011
Spring Integration Config

   <int:channel id="ftpChannel">
      <int:queue/>
   </int:channel>

   <bean id="ftpClientFactory"
      class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory"
      p:host="localhost" p:username="${user}" p:password="${password}"/>
   !
   <int-ftp:inbound-channel-adapter id="ftpInbound"
      channel="ftpChannel" session-factory="ftpClientFactory"
      filename-regex=".*.txt$" auto-create-local-directory="true"
      delete-remote-files="false" remote-directory="/foo/bar/baz/"
      local-directory="file:local-target-dir">
      <int:poller fixed-rate="1000"/>
   </int-ftp:inbound-channel-adapter>

   <int:service-activator input-channel="ftpChannel" ref="receiver" method="receive" />

   <bean id="receiver" class="org.bsnyder.spring.integration.appb.Receiver"/>


                                                                                     40

Friday, July 15, 2011
41

Friday, July 15, 2011
Combined Integration




                           42

Friday, July 15, 2011
Thank You!




           Q&A




Friday, July 15, 2011

More Related Content

PDF
Railsconf 2010
PDF
Puppet camp europe 2011 hackability
PDF
MongoDB at Sailthru: Scaling and Schema Design
PDF
PyCon 2011 Scaling Disqus
PDF
Web micro-framework BATTLE!
PDF
Java EE and Google App Engine
PDF
Time Series Data Storage in MongoDB
PDF
Stone Flats Restaurant by JBI
 
Railsconf 2010
Puppet camp europe 2011 hackability
MongoDB at Sailthru: Scaling and Schema Design
PyCon 2011 Scaling Disqus
Web micro-framework BATTLE!
Java EE and Google App Engine
Time Series Data Storage in MongoDB
Stone Flats Restaurant by JBI
 

Similar to Styles of Applicaton Integration Using Spring (20)

PDF
Beyond Horizontal Scalability: Concurrency and Messaging Using Spring
PDF
Infusion for the birds
PDF
2020-Feb: Testing: Cables and Chains
PDF
Microservices: The Best Practices
PDF
Ruby and Rails, as secret weapon to build your service-oriented apps
PPT
WE-06-Testing.ppt
PPTX
Testing for Logic App Solutions | Integration Monday
PDF
PAC 2019 virtual Joerek Van Gaalen
PPTX
Building trust within the organization, first steps towards DevOps
PPTX
Mastering Complex Application Deployments
PDF
Gartner Infrastructure and Operations Summit Berlin 2015 - DevOps Journey
PPTX
Entity Framework: To the Unit of Work Design Pattern and Beyond
PPTX
Performance Assurance for Packaged Applications
PPTX
Pragmatic Microservices
PPTX
Building The Agile Enterprise - LSSC '12
PDF
NYC MeetUp 10.9
PPTX
Agile enterprise integration
PPTX
Training - What is Performance ?
PDF
JavaSE - The road forward
PDF
Boston MeetUp 10.10
Beyond Horizontal Scalability: Concurrency and Messaging Using Spring
Infusion for the birds
2020-Feb: Testing: Cables and Chains
Microservices: The Best Practices
Ruby and Rails, as secret weapon to build your service-oriented apps
WE-06-Testing.ppt
Testing for Logic App Solutions | Integration Monday
PAC 2019 virtual Joerek Van Gaalen
Building trust within the organization, first steps towards DevOps
Mastering Complex Application Deployments
Gartner Infrastructure and Operations Summit Berlin 2015 - DevOps Journey
Entity Framework: To the Unit of Work Design Pattern and Beyond
Performance Assurance for Packaged Applications
Pragmatic Microservices
Building The Agile Enterprise - LSSC '12
NYC MeetUp 10.9
Agile enterprise integration
Training - What is Performance ?
JavaSE - The road forward
Boston MeetUp 10.10
Ad

More from Bruce Snyder (14)

PDF
Enterprise Messaging With Spring JMS
PDF
ActiveMQ In Action
PDF
ActiveMQ In Action - ApacheCon 2011
PDF
Using Enterprise Integration Patterns as Your Camel Jockey
PDF
Apache ActiveMQ and Apache ServiceMix
PDF
Service-Oriented Integration With Apache ServiceMix
PDF
Messaging With Apache ActiveMQ
PDF
Enterprise Messaging With ActiveMQ and Spring JMS
PDF
Taking Apache Camel For a Ride
PDF
EIP In Practice
PDF
Service Oriented Integration With ServiceMix
PDF
Taking Apache Camel For A Ride
PDF
Messaging With ActiveMQ
PDF
Taking Apache Camel For A Ride
Enterprise Messaging With Spring JMS
ActiveMQ In Action
ActiveMQ In Action - ApacheCon 2011
Using Enterprise Integration Patterns as Your Camel Jockey
Apache ActiveMQ and Apache ServiceMix
Service-Oriented Integration With Apache ServiceMix
Messaging With Apache ActiveMQ
Enterprise Messaging With ActiveMQ and Spring JMS
Taking Apache Camel For a Ride
EIP In Practice
Service Oriented Integration With ServiceMix
Taking Apache Camel For A Ride
Messaging With ActiveMQ
Taking Apache Camel For A Ride
Ad

Recently uploaded (20)

PDF
Encapsulation_ Review paper, used for researhc scholars
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
A Presentation on Artificial Intelligence
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
Cloud computing and distributed systems.
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPT
Teaching material agriculture food technology
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Modernizing your data center with Dell and AMD
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
Encapsulation_ Review paper, used for researhc scholars
“AI and Expert System Decision Support & Business Intelligence Systems”
MYSQL Presentation for SQL database connectivity
Unlocking AI with Model Context Protocol (MCP)
The Rise and Fall of 3GPP – Time for a Sabbatical?
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
A Presentation on Artificial Intelligence
Understanding_Digital_Forensics_Presentation.pptx
Cloud computing and distributed systems.
20250228 LYD VKU AI Blended-Learning.pptx
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Teaching material agriculture food technology
Chapter 3 Spatial Domain Image Processing.pdf
Modernizing your data center with Dell and AMD
Diabetes mellitus diagnosis method based random forest with bat algorithm
Building Integrated photovoltaic BIPV_UPV.pdf
Network Security Unit 5.pdf for BCA BBA.
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Dropbox Q2 2025 Financial Results & Investor Presentation

Styles of Applicaton Integration Using Spring

  • 1. Styles of Application Integration Using Spring Bruce Snyder, Senior Software Engineer, SpringSource/VMware Friday, July 15, 2011
  • 2. Integrations Are About Coupling 2 Friday, July 15, 2011
  • 3. Where Coupling Exists, Concerns Arise • Tight coupling is easy • Loose coupling can be difficult • Tight coupling causes issues in the long run • Loose coupling pays off in the long run • Integrations are usually tightly coupled • Integrations should be loosely coupled • Integrations are commonly addressed using commands • Integrations should be addressed using events Friday, July 15, 2011
  • 4. What is Coupling? “... the degree to which each program module relies on each one of the other modules” (Wikipedia.com) • Given two lines of code, A and B, they are coupled when B must change behavior only because A changed 4 Friday, July 15, 2011
  • 5. Characteristics Tight Coupling • Components are highly dependent upon one another • Components are directly linked • Changes in one component cause a ripple effect • Less reusability • More difficult to maintain • Does not handle unforeseen change well • Examples – Clients designed to interact only with specific systems – Use of proprietary APIs or commands for interaction – Components designed to work specifically with other components 5 Friday, July 15, 2011
  • 6. Characteristics of Loose Coupling • Components have little or no knowledge of one another • Components are not directly linked to one another • Changes in one component do not affect other components • Increased reusability • Easier to maintain • More easily handles unforeseen changes • Examples – Dependence upon interfaces instead of concrete classes – Use of DI encourages looser coupling – A design using a level of indirection 6 Friday, July 15, 2011
  • 7. Tight Coupling is Easy • App design with tight coupling is more widely understood • App development with tight coupling requires less time • Debugging a tightly coupled app is easier • Benefits of tight coupling are seen immediately • Tightly coupled prototypes commonly live on 7 Friday, July 15, 2011
  • 8. Loose Coupling is Difficult • App design with loose coupling is not widely understood • App development with loosely coupling requires more thought and more time • Debugging loosely coupled apps is different • Benefits of loose coupling are only seen over time 8 Friday, July 15, 2011
  • 9. Integrations and Coupling • But it’s easy to write a point-to-point, one-off piece of code for integration! • Too many disadvantages – Difficult to maintain – No reusability – Every integration is unique – Bites you over time 9 Friday, July 15, 2011
  • 10. Integrations and Coupling • But designing integrations to be loosely coupled requires too much work! • With the right knowledge and preparation, it doesn’t need to be this way 10 Friday, July 15, 2011
  • 11. Commands vs. Events • Commands are not natural – Verify credit card • Commands are too specific • Events are natural – Order received • Events are more broad • Events are what happen in the real world 11 Friday, July 15, 2011
  • 12. Enterprise Integration Patterns (EIP) http://enterpriseintegrationpatterns.com/ 12 Friday, July 15, 2011
  • 13. Spring Integration • Provides both concurrency and messaging – Message Endpoints • Connections between services – Channel Adapters • Adapter between application and message broker – Messaging Gateways • Provides uni-directional or bi-directional messaging – Service Activators • Invokes a services based on an incoming message – Routers • Determines where to dispatch a message – Splitters and Aggregators • Breaks up a message and reassembles it after processing 13 Friday, July 15, 2011
  • 14. Spring Integration • Supports – AMQP – Email – File system – Gemfire – JMS – JMX – MongoDB – Redis – Spring Batch – Testing – Web Services 14 Friday, July 15, 2011
  • 15. Spring Integration 15 Friday, July 15, 2011
  • 16. Spring Integration 16 Friday, July 15, 2011
  • 17. Spring Integration 17 Friday, July 15, 2011
  • 18. Spring Integration 18 Friday, July 15, 2011
  • 19. Spring Integration 19 Friday, July 15, 2011
  • 20. Spring Integration 20 Friday, July 15, 2011
  • 21. Spring Integration 21 Friday, July 15, 2011
  • 22. Spring Integration 22 Friday, July 15, 2011
  • 23. Spring Integration 23 Friday, July 15, 2011
  • 24. Spring Integration 24 Friday, July 15, 2011
  • 25. Types of Integration • Intra-application integration • Inter-application integration • External system integration 25 Friday, July 15, 2011
  • 26. Typical Application Layers 26 Friday, July 15, 2011
  • 27. Intra-Application Integration 27 Friday, July 15, 2011
  • 28. Spring Integration Config <int:gateway id="sender" service-interface="org.bsnyder.spring.integration.simple.Sender"/> <int:channel id="orderReceived"/> <int:service-activator input-channel="orderReceived" ref="receiver" method="receive" /> <bean id="receiver" class="org.bsnyder.spring.integration.simple.Receiver"/> 28 Friday, July 15, 2011
  • 29. Intra-Application Integration 29 Friday, July 15, 2011
  • 30. Spring Integration Config <int:gateway id="sender" service-interface="org.bsnyder.spring.integration.appa.Sender"/> <channel id="orderReceived" /> <amqp:outbound-channel-adapter channel="orderReceived" exchange-name="order.received.exchange" routing-key="order.received.binding" amqp-template="amqpTemplate" /> <rabbit:connection-factory id="connectionFactory" /> <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" /> <rabbit:admin connection-factory="connectionFactory" /> <rabbit:queue name="order.received.queue" /> <rabbit:direct-exchange name="order.received.exchange"> <rabbit:bindings> <rabbit:binding queue="order.received.queue" key="order.received.binding" /> </rabbit:bindings> </rabbit:direct-exchange> 30 Friday, July 15, 2011
  • 31. Spring Integration Config <amqp:inbound-channel-adapter channel="orderReceived" queue-names="order.received.queue" connection-factory="connectionFactory" /> <int:service-activator input-channel="orderReceived" ref="receiver" method="receive" /> <bean id="receiver" class="org.bsnyder.spring.integration.appa.Receiver"/> <rabbit:connection-factory id="connectionFactory" /> <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" /> <rabbit:admin connection-factory="connectionFactory" /> <rabbit:queue name="order.received.queue" /> <rabbit:direct-exchange name="order.received.exchange"> <rabbit:bindings> <rabbit:binding queue="order.received.queue" key="order.received.binding" /> </rabbit:bindings> </rabbit:direct-exchange> 31 Friday, July 15, 2011
  • 33. Inter-Application Integration 33 Friday, July 15, 2011
  • 34. Inter-Application Integration 34 Friday, July 15, 2011
  • 35. Spring Integration Config <int:gateway id="sender" service-interface="org.bsnyder.spring.integration.appa.Sender"/> <channel id="orderReceived" /> <amqp:outbound-channel-adapter channel="orderReceived" exchange-name="order.received.exchange" routing-key="order.received.binding" amqp-template="amqpTemplate" /> <rabbit:connection-factory id="connectionFactory" /> <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" /> <rabbit:admin connection-factory="connectionFactory" /> <rabbit:queue name="order.received.queue" /> <rabbit:direct-exchange name="order.received.exchange"> <rabbit:bindings> <rabbit:binding queue="order.received.queue" key="order.received.binding" /> </rabbit:bindings> </rabbit:direct-exchange> 35 Friday, July 15, 2011
  • 36. Spring Integration Config <amqp:inbound-channel-adapter channel="orderReceived" queue-names="order.received.queue" connection-factory="connectionFactory" /> <int:service-activator input-channel="orderReceived" ref="receiver" method="receive" /> <bean id="receiver" class="org.bsnyder.spring.integration.appb.Receiver"/> <rabbit:connection-factory id="connectionFactory" /> <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" /> <rabbit:admin connection-factory="connectionFactory" /> <rabbit:queue name="order.received.queue" /> <rabbit:direct-exchange name="order.received.exchange"> <rabbit:bindings> <rabbit:binding queue="order.received.queue" key="order.received.binding" /> </rabbit:bindings> </rabbit:direct-exchange> 36 Friday, July 15, 2011
  • 38. External System Integration 38 Friday, July 15, 2011
  • 39. Spring Integration Config <int:gateway id="sender" service-interface="org.bsnyder.spring.integration.appa.Sender"/> <bean id="ftpClientFactory" class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory" p:host" value="localhost" p:username" value="${user}" p:password="$ {password}"/> ! <int:channel id="ftpChannel"/> <int-ftp:outbound-channel-adapter id="ftpOutbound" channel="ftpChannel" remote-directory="/foo/bar/baz/" client-factory="ftpClientFactory"/> 39 Friday, July 15, 2011
  • 40. Spring Integration Config <int:channel id="ftpChannel"> <int:queue/> </int:channel> <bean id="ftpClientFactory" class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory" p:host="localhost" p:username="${user}" p:password="${password}"/> ! <int-ftp:inbound-channel-adapter id="ftpInbound" channel="ftpChannel" session-factory="ftpClientFactory" filename-regex=".*.txt$" auto-create-local-directory="true" delete-remote-files="false" remote-directory="/foo/bar/baz/" local-directory="file:local-target-dir"> <int:poller fixed-rate="1000"/> </int-ftp:inbound-channel-adapter> <int:service-activator input-channel="ftpChannel" ref="receiver" method="receive" /> <bean id="receiver" class="org.bsnyder.spring.integration.appb.Receiver"/> 40 Friday, July 15, 2011
  • 42. Combined Integration 42 Friday, July 15, 2011
  • 43. Thank You! Q&A Friday, July 15, 2011