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
Network Security Unit 5.pdf for BCA BBA.
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Encapsulation theory and applications.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Machine learning based COVID-19 study performance prediction
PPTX
Tartificialntelligence_presentation.pptx
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
1. Introduction to Computer Programming.pptx
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PPT
Teaching material agriculture food technology
PDF
A comparative analysis of optical character recognition models for extracting...
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
Network Security Unit 5.pdf for BCA BBA.
Assigned Numbers - 2025 - Bluetooth® Document
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
“AI and Expert System Decision Support & Business Intelligence Systems”
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Encapsulation theory and applications.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
Machine learning based COVID-19 study performance prediction
Tartificialntelligence_presentation.pptx
The Rise and Fall of 3GPP – Time for a Sabbatical?
Group 1 Presentation -Planning and Decision Making .pptx
Unlocking AI with Model Context Protocol (MCP)
1. Introduction to Computer Programming.pptx
SOPHOS-XG Firewall Administrator PPT.pptx
Teaching material agriculture food technology
A comparative analysis of optical character recognition models for extracting...
Programs and apps: productivity, graphics, security and other tools
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Digital-Transformation-Roadmap-for-Companies.pptx

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