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.
JIRA: https://jira.spring.io/browse/INT-3351
INT-3351: Polishing according PR comments
* Add `property-placeholder` support for `@Poller`
* Change `ref` to `value`
* Add JavaDoc for `array` workaround
* Add docs
INT-3351: Polishing and fixes
INT-3351 More Tests
INT-3351: PR comments
INT-3351 Final Polishing
JIRA: https://jira.spring.io/browse/INT-2595
* Add `group-timeout` and `group-timeout-expression` to the Correlation Endpoint
* Add logic to the `AbstractCorrelatingMessageHandler` to schedule group for `forceComplete`,
when the target `ReleaseStrategy` returns `false`
INT-2595: Polishing according PR comments
INT-2595: Expose `lock-registry` and further docs
INT-2595 Doc and Test Polishing
INT-2595: Fix typos
INT-2595 More Minor Doc Polish
JIRA: https://jira.spring.io/browse/INT-3349
Several FactoryBeans did not propagate the BeanFactory
to their created object(s). Beans that create messages
must have access to a bean factory to get the
message builder factory.
Fix the FactoryBeans and add a mock FB to all tests that
need one.
Add a runtime environment variable to make any infractions
fatal. This should be set to `true` on CI builds and on
framework developer environments.
JIRA: https://jira.spring.io/browse/INT-3337
INT-3337: Addressing PR comments
INT-3337: Add support to store/read Messages
* Add support to store/read `ErrorMessage`. As a trick for `Throwable` is selected (de)serializing converter
INT-3337: Add converters for `Message<?>` impls
INT-3337: Make `MDbMS.MessageWrapper` AuditAware
Add `_id` persistence field
Addressing PR comments
Polishing
- Docs
- Check for null ApplicationContext
- Add afterPropertiesSet() to tests
JIRA: https://jira.spring.io/browse/INT-3326
INT-3326: Add parent-child test
INT-3326: Fix `ClassCastException` for `GCII`
INT-3326: Rebase and Polishing
INT-3326: Fix `GCII` for `getBeanNamesForType`
INT-3326: Add `GlobalChannelInterceptor` annotation
JIRA: https://jira.spring.io/browse/INT-3326
INT-3326: Add parent-child test
INT-3326: Fix `ClassCastException` for `GCII`
INT-3326: Rebase and Polishing
INT-3326: Fix `GCII` for `getBeanNamesForType`
INT-3326 Polishing Doc, JavaDocs
Also fix a typo in the bean name for the CI processor.
INT-3326: Polishing
Doc Polishing
Implicit channel declaration for items downstream
of a `ChannelInterceptor` were not created.
The `BPP` eagerly fetched the interceptors during its
own creation; this caused the context initialization to fail
because the channel initializer hasn't run yet.
Defer creation of the interceptor beans until they are
actually needed.
Also, when using `@Configuration`, the channelInitializer
is no longer the first bean in the bean factory.
INT-3332 Use SmartLifeCycle to Apply Interceptors
Instead of using a bean post processor, the interceptor
processor now performs the channel interception when beans
in phase Integer.MIN_VALUE are started - after all beans
have been instantiated.
Polishing