JIRA: https://jira.spring.io/browse/INT-3722 The TCP outbound gateway correlates replies based on the connection id. When a `CachingClientConnectionFactory` is being used, the connection is returned to the pool too early, and can be reused. It is possible that the current thread then removes the "next" pending reply from the correlation map. Add code to the `CachingClientConnectionFactory` so that the "self" close from the connection (called after `onMessage`) is deferred and the actual close (return to cache) is controlled by the gateway itself. This mechanism will no longer be needed when INT-3654 is resolved (removal of the "self" closing by connections). At that time, connection users (such as the gateway) will be in complete control.
Spring Integration 
Checking out and Building
To check out the project and build from source, do the following:
git clone git://github.com/spring-projects/spring-integration.git
cd spring-integration
./gradlew build
If you encounter out of memory errors during the build, increase available heap and permgen for Gradle:
GRADLE_OPTS='-XX:MaxPermSize=1024m -Xmx1024m'
To build and install jars into your local Maven cache:
./gradlew install
To build api Javadoc (results will be in build/api):
./gradlew api
To build reference documentation (results will be in build/reference):
./gradlew reference
To build complete distribution including -dist, -docs, and -schema zip files (results will be in build/distributions)
./gradlew dist
Using Eclipse
To generate Eclipse metadata (.classpath and .project files), do the following:
./gradlew eclipse
Once complete, you may then import the projects into Eclipse as usual:
File -> Import -> Existing projects into workspace
Browse to the 'spring-integration' root directory. All projects should import free of errors.
Using IntelliJ IDEA
To generate IDEA metadata (.iml and .ipr files), do the following:
./gradlew idea
Resources
For more information, please visit the Spring Integration website at: http://projects.spring.io/spring-integration