Files
spring-integration/index.html
2014-11-18 10:11:49 -05:00

172 lines
5.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
# The name of your project
title: Spring Integration
badges:
# Customize your project's badges. Delete any entries that do not apply.
custom:
- name: Source (GitHub)
url: https://github.com/spring-projects/spring-integration
icon: github
- name: Issues (JIRA)
url: http://jira.springsource.org/browse/INT
icon: tracking
- name: CI (Bamboo)
url: https://build.springsource.org/browse/INT
icon: ci
- name: StackOverflow
url: http://stackoverflow.com/questions/tagged/spring-integration
icon: stackoverflow
- name: Metrics (SonarQube)
url: https://sonar.springsource.org/dashboard/index/org.springframework.integration:spring-integration
icon: metrics
---
<!DOCTYPE HTML>
<html lang="en-US">
{% capture billboard_description %}
Extends the Spring programming model to support the well-known
[Enterprise Integration Patterns](http://www.eaipatterns.com). Spring Integration enables lightweight messaging
within Spring-based applications and supports integration with external systems via declarative adapters.
Those adapters provide a higher-level of abstraction over Spring's support for remoting, messaging,
and scheduling. Spring Integration's primary goal is to provide a simple model for building enterprise
integration solutions while maintaining the separation of concerns that is essential for producing
maintainable, testable code.
[Pivotal Recognized in DZones 2014 Guide to Enterprise Integration.](https://spring.io/blog/2014/11/12/pivotal-recognized-in-dzone-s-2014-guide-to-enterprise-integration)
{% endcapture %}
{% capture main_content %}
## Introduction
Using the [Spring Framework](/spring-framework/) encourages developers to code using interfaces and use dependency injection (DI) to provide a Plain Old Java Object (POJO) with the dependencies it needs to perform its tasks. __Spring Integration__ takes this concept one step further, where POJOs are wired together using a messaging paradigm and individual components may not be aware of other components in the application. Such an application is built by assembling fine-grained reusable components to form a higher level of functionality. WIth careful design, these flows can be modularized and also reused at an even higher level.
In addition to wiring together fine-grained components, Spring Integration provides a wide selection of channel adapters and gateways to communicate with external systems. Channel Adapters are used for one-way integration (send or receive); gateways are used for request/reply scenarios (inbound or outbound). For a full list of adapters and gateways, refer to the reference documentation.
The [Spring XD](/spring-xd/) project builds on Spring Integration, where Spring Integration modules are assembled into an XD Stream.
## Features
* Implementation of most of the [Enterprise Integration Patterns](http://www.eaipatterns.com)
* Endpoint
* Channel (Point-to-point and Publish/Subscribe)
* Aggregator
* Filter
* Transformer
* Control Bus
* ...
* Integration with External Systems
* ReST/HTTP
* FTP/SFTP
* Twitter
* WebServices (SOAP and ReST)
* TCP/UDP
* JMS
* RabbitMQ
* Email
* ...
* The framework has extensive JMX support
* Exposing framework components as MBeans
* Adapters to obtain attributes from MBeans, invoke operations, send/receive notifications
<span id="quick-start"></span>
## Quick Start
{% include download_widget.md %}
In the following "quick start" application you can see that the same gateway interface is
used to invoke two completely different service implementations. To build and run this program
you will need the __spring-integration-ws__ and __spring-integration-xml__ modules as described
above.
````java
public class Main {
public static void main(String... args) throws Exception {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("context.xml");
// Simple Service
TempConverter converter =
ctx.getBean("simpleGateway", TempConverter.class);
System.out.println(converter.fahrenheitToCelcius(68.0f));
// Web Service
converter = ctx.getBean("wsGateway", TempConverter.class);
System.out.println(converter.fahrenheitToCelcius(68.0f));
}
}
````
````java
public interface TempConverter {
float fahrenheitToCelcius(float fahren);
}
````
````xml
<!-- Simple Service -->
<int:gateway id="simpleGateway"
service-interface="foo.TempConverter"
default-request-channel="simpleExpression" />
<int:service-activator id="expressionConverter"
input-channel="simpleExpression"
expression="(payload - 32) / 9 * 5"/>
<!-- Web Service -->
<int:gateway id="wsGateway" service-interface="foo.TempConverter"
default-request-channel="viaWebService" />
<int:chain id="wsChain" input-channel="viaWebService">
<int:transformer
expression="'&lt;FahrenheitToCelsius xmlns=''http://tempuri.org/''&gt;&lt;Fahrenheit&gt;XXX&lt;/Fahrenheit&gt;&lt;/FahrenheitToCelsius&gt;'.replace('XXX', payload.toString())" />
<int-ws:header-enricher>
<int-ws:soap-action value="http://tempuri.org/FahrenheitToCelsius"/>
</int-ws:header-enricher>
<int-ws:outbound-gateway
uri="http://www.w3schools.com/webservices/tempconvert.asmx"/>
<int-xml:xpath-transformer
xpath-expression="/*[local-name()='FahrenheitToCelsiusResponse']/*[local-name()='FahrenheitToCelsiusResult']"/>
</int:chain>
````
{% endcapture %}
{% capture related_resources %}
### Sample Projects
* 50+ [Sample Applications](https://github.com/SpringSource/spring-integration-samples)
### Extensions
* [Community provided Extensions](https://github.com/SpringSource/spring-integration-extensions)
* **Contributions are welcome!**
* See [Contributor Guidelines](https://github.com/SpringSource/spring-integration/blob/master/CONTRIBUTING.md).
### Resources
* [Guides](resources.html#guides)
* [Books](resources.html#books)
* [Articles](resources.html#articles)
* [Videos](resources.html#videos)
{% endcapture %}
{% include project_page.html %}
</html>