Skip to content

Spring Integration 2.2 to 3.0 Migration Guide

Artem Bilan edited this page Sep 2, 2013 · 26 revisions

##MessageGroupCallback

This interface is now an inner interface of MessageGroupStore; everything remains the same, just change the import.

##integrationConversionService

Spring Integration no longer does fall back to the BeanFactory's ConversionService, however there is still falling back to the creation of DefaultConversionService where it is appropriate, if there is no registered integrationConversionService bean. If there is really a reason to use conversionService as integrationConversionService, it's just enough to add one more line to the Application Context:

<alias name="conversionService" alias="integrationConversionService"/>

##Aggregator & Resequencer

<aggregator> no longer iterates over message groups in the AggregatingMessageHandler#setExpireGroupsUponCompletion to remove complete groups. It could lead to an overload on application start up with a big persistent MessageStore. The similar logic is present on the AbstractCorrelatingMessageHandler#forceComplete, when expiring of message groups removes empty groups as well. An empty group is comlete too, as for <aggregator>, and for <resequencer>: on each 'release' the group is marked as 'comlete' and relased messages is removed from the group.

For removing empty groups purpose there is need to configure a MessageGroupStoreReaper for the MessageStore of the <aggregator> or the <resequencer>.

In additional to achieve better robustness and flexibility was introduced an empty-group-min-timeout attribute for the <aggregator> and the <resequencer>. If you wish to run empty group deletion on a longer schedule than expiring partial groups, set this property. Empty groups will then not be removed from the MessageStore until they have not been modified for at least this number of milliseconds.

XML Module

Removed xpath-selector

In prior versions of Spring Integration the functionality of the XPath Filter was configured using the xpath-selector element. However, in order to provide a more consistent behavior within the Spring Integration Framework, the xpath-selector element has been removed.

Please use the xpath-filter instead. It provides the same set of functionality. In fact it still uses the same MessageSelectors internally.

##JSON Transformers

A new abstraction for JSON conversion has been introduced: JsonObjectMapper. Implementations for Jackson 1.x and Jackson 2 are currently provided (JacksonJsonObjectMapper and Jackson2JsonObjectMapper resp.), with the version being determined by presence on the classpath. Usage of Jackson 1.x ObjectMapper for <object-to-json-transformer> and <json-to-object-transformer> is still supported, but it is deprecated and will be removed in future releases. JsonInboundMessageMapper and JsonOutboundMessageMapper have been changed to use new JSON strategy too. JsonInboundMessageMapper now requires an implementation of JsonInboundMessageMapper.JsonMessageParser as one of constructor arguments. JacksonJsonMessageParser and Jackson2JsonMessageParser implementations are provided out of the box.

##Core module packages refactoring

To avoid packages tangle and classes cycling there were introduced new packages: org.springframework.integration.support.context and org.springframework.integration.support.json. The NamedComponent class and JSON infrustruscture classes (e.g. JsonObjectMapper abstraction) were moved to new packages respectively.

##FTP, SFTP, and FTPS Session Caching

Sessions are no longer cached by default; the cache-sessions attribute is no longer available on these endpoints; see the What's New? section of the reference manual.

##Inbound HTTP Header Mapping

Previously, the if-modified-since header was incorrectly mapped as a String representation of a Date instead of a long; also if-unmodified-since header (inbound) contained the wrong value (from if-modified-since).

If your application uses the if-modified-since header, please be aware of the format change.

##JdbcMessageStore

In Spring Integration 2.2 the JDBC Message Store did not correctly execute the queries when using Regions. In order to fix the issue, the REGION column was added to the INT_GROUP_TO_MESSAGE table. Furthermore, the REGION column is now part of the primary key. With Spring Integration 3.0, the queries will now always use the GROUP_KEY and the REGION.

Therefore, please verify that the table structure used for your JDBC Message Store is updated. In the spring-integration-jdbc JAR file you will find updated DDL scripts in the org.springframework.integration.jdbc package. For further information, please see chapter 17.4.3 Initializing the Database of the reference guide.

Clone this wiki locally