JIRA: https://jira.spring.io/browse/INT-3474
When the MethodInvokingMessageHandler skips ineligible methods while
searching it emits a stack trace under DEBUG logging. This is not
needed, a simple log message is enough to convey the information.
Some POJOs gain ineligible methods when wrapped in a proxy so this
is no fault of the developer.
Other reasons for skipping methods (improperly set annotations etc)
continue to emit a stack trace.
INT-3474: Polishing
Rethrow `IneligibleMethodException` as `IllegalArgumentException` in case of a single `method` for processor
JIRA: https://jira.spring.io/browse/INT-3471
- Make final fields protected so they are available to subclasses
- Add property `removeOnGet` allowing the map entry to be removed immediately when it is used
- Add `time-to-live-expression` allowing override of the reaper delay
Polishing
Conflicts:
src/reference/docbook/whats-new.xml
JIRA: https://jira.spring.io/browse/INT-3465
Add support for adding/removing individual recipients to the RecipientListRouter
Modify documentation in what's new and spring-integration-4.1.xsd
Polishing
`AbstractRemoteFileOutboundGateway`: close `outputStream` before `file.delete()` to release exclusive file-lock
JIRA: https://jira.spring.io/browse/INT-3420
Add option to allow the empty group to remain after timeout
so late arriving messages can be discarded.
INT-3420 Add Callout Hyperlinks
The aggregator configuration documentation had hyperlinks
from the attribute descriptions to the attribute in the
XML, but not vice-versa. For a large number of attributes
such as this, bi-directional hyperlinks are useful.
INT-3420 Doc Polishing
JIRA: https://jira.spring.io/browse/INT-3475
Change the phase for `SourcePollingChannelAdapterFactoryBean`, `AbstractPollingEndpoint`, `MessageProducerSupport`, `JmsMessageDrivenEndpoint`
to the `Integer.MAX_VALUE / 2`
JIRA: https://jira.spring.io/browse/INT-3470
* Apply the last `ChannelInterceptor` changes - just `extends ChannelInterceptorAdapter`
* Change some tests to check content according to the new changes to the `GenericMessage#toString()`
**Cherry-pick to 4.0.x**
JIRA: https://jira.spring.io/browse/INT-3448
INT-3448: Addressing PR comments
Late Resolution of @Publisher.defaultChannel
Early resolution of the publisher default channel caused
`@ Configuration` factory beans to be instantiated before
Spring Integration bean post processors had been registered.
Use the channel name instead of channel reference and resolve
it when processing the first publish.
Merge branch 'INT-3448' of https://github.com/garyrussell/spring-integration into INT-3448
Conflicts:
spring-integration-core/src/test/java/org/springframework/integration/configuration/EnableIntegrationTests.java
INT-3448: Polishing
JIRA: https://jira.spring.io/browse/INT-3404
Previously, `AbstractInboundFileSynchronizingMessageSource` implemented both `MessageProducer` and `MessageSource`.
The `MessageProducer` is really redundant and confusing.
Also, it might produce some side-effects when using JavaConfig.
Provide some other simple but important fix for all `AbstractMessageSource` implementation to invoke `super.afterPropertiesSet()`
Polishing
Add mock bean factory to failing tests.
Revert state assertions in AbstractInboundFileSynchronizingMessageSource;
the fields are state, not arguments, at the time they are being
asserted.
JIRA: https://jira.spring.io/browse/INT-3458
* Change Spring AMQP to `1.3.5.RELEASE`
* `HttpRequestHandlingEndpointSupport`: remove `MappingJacksonHttpMessageConverter` registration
* `IntegrationRequestMappingHandlerMapping`: add 'fake' `name()` attribute to the inline `RequestMapping` annotation
* `StoredProcJmxManagedBeanTests`: remove `context.stop();` code, Since `MBeanExporter` deregister MBeans on `stop()` now
* `StoredProcPollingChannelAdapterParserTests`: change deprecated `ParameterizedSingleColumnRowMapper` to the `SingleColumnRowMapper`
* `Jms`: comment out the reflection code to check the value for the `recoveryInterval`, because it is removed already in favor of `backOff`
* `NotificationListeningMessageProducer`: move the start-up listener registration to the `onApplicationEvent`,
because `MBeanExporter` moved `registerBeans()` to the `start()` now.
The same `phase` might cause the issue, that MBeans aren't registered yet for `NotificationListeningMessageProducer`
* `JpaOutboundGatewayTests`: change `@TransactionConfiguration` to the `@Transactional`. Don't know why the first doesn't work now.
**Cherry-pick to 4.0.x**
INT-3458: Addressing PR comments
`NotificationListeningMessageProducer`: defer listener registration until `onApplicationEvent()`
JIRA: https://jira.spring.io/browse/INT-3442
Previously `RedisQueueMessageDrivenEndpoint.stop()` returned immediately.
It caused an issue when one more `message` might be read and processed to stopped app.
* Introduce `AbstractEndpoint#lifecycleCondition` and wait on it from `RedisQueueMessageDrivenEndpoint.doStop()`
and `signal()` it from `ListenerTask`.
* Since everything is done around `lifecycleLock` the `RedisQueueMessageDrivenEndpoint.stop()` waits for the proper
'last' message process.
* Add tiny `Thread.sleep(1)` to the `popMessageAndSend` cycle to free `lifecycleLock` for other Threads, e.g. `stop()`
INT-3442: Get rid of `lock` from listener cycle
* Introduce `stopTimeout` to minimize the `stop` thread blocking
* If the message is returned after that timeout it moved back to Redis List using `RPUSH`
INT-3442: Addressing PR comments
JIRA: https://jira.spring.io/browse/INT-3430
Add an option to eagerly connect to rabbit when
only using outbound endpoints. Log an ERROR
if the connection can not be established during
context initialization.
Polishing
JIRA: https://jira.spring.io/browse/INT-3423
Consider a message containing "one one" and a splitter
with expression "payload.split(' ')", only one message
is emitted.
The default Collection created by SpEL is a HashSet.
Change the ExpressionEvaluatingSplitter to expect a
List instead of a Collection.
JIRA: https://jira.spring.io/browse/INT-3413
Add MessageGroupExpiredEvent with group metadata
such as message count, last modified, whether
the group was discarded or not.
Conflicts:
spring-integration-core/src/test/java/org/springframework/integration/aggregator/AggregatorTests.java
Polishing
JIRA: https://jira.spring.io/browse/INT-3386
Eliminate unnecessary group copy during retrieval in the
aggregator. This is expensive with large groups.
Ensure that the reaper uses a snapshot of the group at the
time it is considered for reaping.
AggregatorTests.testAggPerf() - before:
AggregatorTests [main] : Sent 0 in 0.0 (10k in 0ms)
AggregatorTests [main] : Sent 10000 in 4.872 (10k in 4872ms)
AggregatorTests [main] : Sent 20000 in 16.86 (10k in 11988ms)
AggregatorTests [main] : Sent 30000 in 36.809 (10k in 19949ms)
AggregatorTests [main] : Sent 40000 in 65.045 (10k in 28236ms)
AggregatorTests [main] : Sent 50000 in 100.329 (10k in 35284ms)
AggregatorTests [main] : Received 60000
AggregatorTests [main] : Sent 60000 in 143.106 (10k in 42777ms)
AggregatorTests [main] : Sent 70000 in 147.027 (10k in 3921ms)
AggregatorTests [main] : Sent 80000 in 158.664 (10k in 11637ms)
AggregatorTests [main] : Sent 90000 in 177.956 (10k in 19292ms)
AggregatorTests [main] : Sent 100000 in 205.045 (10k in 27089ms)
AggregatorTests [main] : Sent 110000 in 240.005 (10k in 34960ms)
AggregatorTests [main] : Received 60000
AggregatorTests [main] : Sent 120000 in 282.566 (10k in 42561ms)
After:
AggregatorTests [main] : Sent 0 in 0.0 (10k in 0ms)
AggregatorTests [main] : Sent 10000 in 0.612 (10k in 612ms)
AggregatorTests [main] : Sent 20000 in 0.925 (10k in 313ms)
AggregatorTests [main] : Sent 30000 in 1.131 (10k in 206ms)
AggregatorTests [main] : Sent 40000 in 1.288 (10k in 157ms)
AggregatorTests [main] : Sent 50000 in 1.361 (10k in 73ms)
AggregatorTests [main] : Received 60000
AggregatorTests [main] : Sent 60000 in 1.522 (10k in 161ms)
AggregatorTests [main] : Sent 70000 in 1.619 (10k in 97ms)
AggregatorTests [main] : Sent 80000 in 1.696 (10k in 77ms)
AggregatorTests [main] : Sent 90000 in 1.75 (10k in 54ms)
AggregatorTests [main] : Sent 100000 in 1.81 (10k in 60ms)
AggregatorTests [main] : Sent 110000 in 1.851 (10k in 41ms)
AggregatorTests [main] : Received 60000
AggregatorTests [main] : Sent 120000 in 1.918 (10k in 67ms)
JIRA: https://jira.spring.io/browse/INT-3408
* Add `TransactionSynchronizationFactoryBean`
* Introduce `IntegrationResourceHolderSynchronization`
to get deal with `IntegrationResourceHolder` for custom `TransactionSynchronization`
* Encapsulate `IntegrationResourceHolder` in the `DefaultTransactionSynchronizationFactory`
* Get deal with `IntegrationResourceHolder` and bind it to the `TransactionSynchronizationManager`
only if `TransactionSynchronization` from `transactionSynchronizationFactory`
is `synchronization instanceof IntegrationResourceHolderSynchronization`
INT-3408: Encapsulate binding in the `DefTxSyncF`
JIRA: https://jira.spring.io/browse/INT-3410
When running a fixed thread pool with a bound queue,
and CALLER_RUNS execution rejection policy, it
was possible to deadlock the IO selector thread.
Add a `CompositeExecutor` to use different threads for
IO to those used for message assembly.
Add a `CallerBlocksPolicy` to block the invoking thread
(for a specified time) if the pool is exhausted.
Add documentation.
Polishing
JIRA: https://jira.spring.io/browse/INT-3381
* Add support to mark `@Bean` methods with `Messaging Annotations`
* Addition attributes for `Messaging Annotations`
* Some refactoring and fixing
* Fix `AbstractMappingMessageRouter#onInit()` propagation
* Fix `GemfireGroupStoreTests` (https://build.spring.io/browse/INT-MASTERSPRING40-JOB1-246/test/case/135235772)
There is still some side effect: we need define `MessageChannel` beans explicitly. Since methods are processed within `BPP`,
not all beans with `Messaging Annotations` might be processed.
INT-3381: PR comments and other fixes
INT-3381 Polishing
INT-3381: Revert `RouterFB` & `SplitterFB`
JIRA: https://jira.spring.io/browse/INT-3382
- Make private methods protected; add protected getters
- Support obtaining just metadata from stores
- Support just fetching the first message from a group
- add metaSize() to message group
INT-3382: Polishing
JIRA: https://jira.spring.io/browse/INT-3376
Allow user annotations with Messaging Meta-Annotations
override/supplement attributes set on the meta-Annotation.
PR Comments and More
- Do not create a bean definition for the annotation (interface)
when `MessagingGateway` is used as a meta-Annotation.
- For a `MessagingGateway` restore attributes overridden with empty values
- Other PR comments.
Fully support meta-Annotation hierarchy.
Polishing:
* Upgrade JRuby to 1.7.12
* Replace `AnnotationFinder` with moving its methods to `MessagingAnnotationUtils`
* Refactor aggregator classes to use `MessagingAnnotationUtils` to determine the method for annotation
* Fix `IntegrationComponentScanRegistrar` to skip annotation classes
* Fix `MessagingGatewayRegistrar#replaceEmptyOverrides`
* Improve `MessagingAnnotationPostProcessor` to use `ReflectionUtils.USER_DECLARED_METHODS` `MethodFilter`
* Change the `MethodAnnotationPostProcessor` hierarchy to use just list of annotations to process attributes
JIRA: https://jira.spring.io/browse/INT-3379
Change enumerated attributes to a union with xsd:string
to allow placeholders.
JMS and XML deferred to 4.1 due to the amount of
changes needed to the parsers. See INT-3384.
JIRA: https://jira.spring.io/browse/INT-3374
Move `getMessageBuilderFactory` from `IntegrationContexUtils`
to `IntegrationUtils`.
Change DOS Newlines to Unix
`AbstractMessageGroupStore`.
JIRA: https://jira.spring.io/browse/INT-3374
`DefaultDatatypeChannelMessageConverter`
Move `getConversionService()` from `IntegrationContextUtils`
to `IntegrationUtils` in `support.utils`.
JIRA: https://jira.spring.io/browse/INT-2352
Add `replaceChannelMappings()` to the `AMMR`.
INT-2352 Polishing - PR Comments
Consolidate tests.
Fix up `@ManagedAttribute` Vs `@ManagedOperation`
Expose `setChannelMappings` over JMX
JIRA: https://jira.spring.io/browse/INT-3338
INT-3338: Add Docs
INT-3338: Make `priority` 'smart'
Add `Sort` for all group queries dependently of `priorityEnabled`.
Avoids the need to configure separate collections for different type of `MessageStore`
INT-3338: Add `MongoDbChannelMessageStore`
INT-3338: Polishing, Fixes, Improvements
Doc Polishing
Fix stream test.
JIRA: https://jira.spring.io/browse/INT-2738
Add a `getComponentType()` method for all handlers,
message producers, and message sources that implement
`NamedComponent` (see `SPCA.getComponentType()`).
Add rome as an optional dependency - STS complained
because AtomFeedHttpMessageConverter has a dependency
on it.