Commit Graph

307 Commits

Author SHA1 Message Date
Gary Russell
4ab2c158b3 INT-3837: TCP GW - Propagate Socket Timeout
JIRA: https://jira.spring.io/browse/INT-3837

INT-3103 introduced exception propagation to waiting gateway threads.

However, `SocketTimeoutException`s were not propagated (in all cases
since 4.2 and for single-use sockets since 3.0).
2015-09-28 10:11:23 -04:00
Artem Bilan
cb318f59ee INT-3821: Description for MessagingException ctor
JIRA: https://jira.spring.io/browse/INT-3821

The `MessagingException` provides an empty String for its `NestedRuntimeException`
for those ctors which are without `description` argument.

The `NestedRuntimeException` uses `NestedExceptionUtils.buildMessage` for `getMessage()` implementation
and the algorithm there is based on the `message != null` condition to build the first part of the nested
cascade. In the case of empty String we end up with useless ";" part in the StackTrace logs.

Fix Framework classes to use the `MessagingException` ctor with particular description.
2015-09-08 22:55:52 -04:00
Gary Russell
1043ffabcb TCP: Fix Event Tests Race Condition - take 2 2015-08-14 13:20:28 -04:00
Gary Russell
d5dcb419c3 TCP: Fix Event Tests Race Condition 2015-08-14 13:05:50 -04:00
Gary Russell
3133782cc5 INT-3801: TCP Server Fix NPE with Early Stop
JIRA: https://jira.spring.io/browse/INT-3801

NPE if the server is stopped before it fully started.

Also fix SOLinger tests.

Fix `ConnectionFactoryTests` for Java < 8 compatibility
2015-08-13 20:08:12 -04:00
Gary Russell
bcfc4d88c1 INT-3800: Expose Actual Port Chosen When Random
JIRA: https://jira.spring.io/browse/INT-3800

If the server port is 0, return the actual port after the factory is started.

Also add more TCP Test Diagnostics.
2015-08-13 11:28:37 -04:00
Gary Russell
4ab25121af INT-3799: Fix Tangles
Part 1 - eliminate references from support to other packages

Part 2 - handler to aggregator/router
- move BarrierMH to aggregator
- Fix ScatterGather references

Part 3 - move TrackableComponent
- to support.management

Part 4 - class tangles
- TcpConnectionServerExceptionEvent
- RecipientListRouterManagement

INT-3799: Polishing
2015-08-13 10:32:55 -04:00
Gary Russell
adb0f43aa8 INT-3779: CodecMessageConverter and Docs
JIRA: https://jira.spring.io/browse/INT-3779

Fix timeouts for the `EnableIntegrationTests`: https://build.spring.io/browse/INT-B41-385
2015-08-11 18:21:35 -04:00
Gary Russell
e2a10a8d79 TCP: Add Diagnostics 2015-08-11 15:56:23 -04:00
Gary Russell
a70bc06a18 Fix FailoverClientConnectionFactoryTests
Race condition in `ServerSocket`; the `accept` thread is exiting due to the
close, but it still accepted a new message.

All tests need to wait until the server has stopped listening (as well as
waiting for the close to be propagated to the client).
2015-08-11 10:49:26 -04:00
Gary Russell
0ce5f12342 INT-3795: TCP: Combo Failover and Cached CFs
JIRA: https://jira.spring.io/browse/INT-3795

Previously, a `CachingClientConnectionFactory` could wrap `FailoverClientConnectionFactory` instances.

It was not possible to wrap `CachingClientConnectionFactory` instances in a `FailoverClientConnectionFactory`.

The failover logic only failed over when an `IOException` occurred, whereas the CCCF wrapped the IOException
in a `MessagingException`.

- Catch all exceptions in the failover logic
- Add real TCP test cases for both scenarios
 - test failover when a connection is closed
 - test failover when the first factory cannot connect at all

INT-3795: Polishing - Fix Test Race

Revert `.travis.yml` changes
2015-08-05 20:33:05 -04:00
Artem Bilan
ec12b289c2 INT-3786: Fix Several Sporadic Test Failures
JIRA: https://jira.spring.io/browse/INT-3786

* Increase `receiveTimeout` for several `QueueChannel` and `CountDownLatch` based tests
* Fix `FileSplitterTests` for Windows compatibility - `UTF-8` for bytes conversion
* Make some STOMP tests as `LongRunning`

The next fixing phase
2015-07-30 15:28:02 -04:00
Gary Russell
448f9a52d2 Debugging for TCP FailOver Tests
Add LogLevelAdjuster; enable TRACE debugging for this test class.
2015-07-30 12:44:41 -04:00
Gary Russell
774e5868f0 INT-3567: JMS Shared Subscriptions
JIRA: https://jira.spring.io/browse/INT-3567

Namespace support for JMS 2.0 shared subscriptions.

INT-3567: AsciiDoc

* `What's New` polishing
* `TcpConnectionEventInboundChannelAdapterParser` deprecation warn fix
2015-07-16 13:41:30 -04:00
Gary Russell
f1fc0edbf3 INT-3425: Deprecate TCP Event Channel Adapter
JIRA: https://jira.spring.io/browse/INT-3425

Deprecate `TcpConnectionEventListeningMessageProducer` in favor
of using a generic event inbound channel adapter.

Polishing
2015-07-15 10:15:42 -04:00
Artem Bilan
9c96a14cd1 INT-3749: Revert setters for EC
JIRA: https://jira.spring.io/browse/INT-3749

Since some target application could inject there is `EvaluationContext` before, removal of
 `setIntegrationEvaluationContext()` is breaking change.

 This fix reverts all those setters.
2015-06-27 12:36:33 -04:00
Artem Bilan
3392d4e1ab INT-3749: Get rid of IECA logic
JIRA: https://jira.spring.io/browse/INT-3749

Since `IntegrationEvaluationContextAware` isn't so "context-free" resource like `BeanFactory`
 and `ApplicationContext`, but just a specific bean in the context, we can't follow with `BeanPostProcessor` logic - bad architecture by level of responsibility.
 Therefore we should follow with standard Dependency Injection mechanism to retrieve `evaluationContext` for the particular component.

 Since we can't rely on the `@Autowired` because SI can be used from the raw XML configuration,
 we use utility method instead. The pattern to get the proper `integrationEvaluationContext` is:
 ```
 @Override
 protected void onInit() throws Exception {
 		super.onInit();
 		this.evaluationContext = ExpressionUtils.createStandardEvaluationContext(getBeanFactory());
 }
 ```
2015-06-24 14:57:00 -04:00
Gary Russell
ec5230abc7 INT-3654: Rework TCP Connection Close
JIRA: https://jira.spring.io/browse/INT-3654

Previously, single-use `TcpConnections` self-closed when their use was complete.
This is unnatural and caused issues such as INT-3722.

Remove the self-closing behavior; connection close is now (properly) the responsibility
of the client using the connection:

- Client Side:
-- `TcpOutboundGateway` after the reply is received
-- `TcpSendingMessageHandler` after the send, when there is no collaborating inbound adapter
-- `TcpReceivingChannelAdapter` when it is collaborating (after receiving the reply)

- Server Side:
-- `TcpInboundGateway` after the reply is sent
-- `TcpReceivingChannelAdapter` after the receive, when there is no collaborating outbound adapter
-- `TcpSendingMessageHandler` when it is colllaborating (after sending the reply)

As before, the `CachingClientConnectionFactory` always sets single use on the target factory
to force it to create new connections on demand. It is always a single-use factory itself
so the clients return the connections to the pool (via `close()`).

__Needs a migration guide entry__

INT-3654: Fix Late Listener Registration

Timing failures in `TcpOutboundGatewayTests.testFailoverCached()` (null listener).

The `FailoverClientConnectionFactory` registers its listener with the actual
connections it retrieves from a delegate.

When nesting failover and cached connection factories, we need to propagate the
`enableManualListenerRegistration` to the delegate factories so the connection
will wait for its listener to be registered.
2015-06-23 15:35:10 -04:00
Gary Russell
f4104c199a INT-3745: More TCP Events (Failed Correlation)
JIRA: https://jira.spring.io/browse/INT-3745

Emit events whenever a message is received that can't be correlated to
a connection (or request in the case of an outbound gateway).

Also, when sending messages, wrap the exception in a `MessagingException` so that
the `TcpConnectionExceptionEvent` provides access to the failed message.

INT-3745: Polishing - PR Comments

Fix JavaDocs errors
2015-06-19 13:49:10 -04:00
Gary Russell
7ed79c864d INT-3730: TCP Expose SSLSession for Header Mapping
JIRA: https://jira.spring.io/browse/INT-3730

Expose the `SSLSession` on `TcpConnection` to support custom header
mapping of properties from the session.
2015-06-08 12:15:51 -04:00
Gary Russell
9e1119b434 INT-3728: TCP: Fix Early Receive with Caching CCF
JIRA: https://jira.spring.io/browse/INT-3728

The `CachingClientConnectionFactory` uses a temporary (rejecting) listener until
the connection is established and then replaces the listener in the connection.

There is a race condition in that if the server starts sending messages before the
listener is replaced, the message is rejected.

Add a mechanism to delay `onMessage` calls until the real listener has been
registered.

Also fix `onMessage` in the cached connection so an `ErrorMessage` is propagated correctly.

To reproduce: revert src/main; add `Thread.sleep(1000)` before `registerListener(tcpListener);`
in `CachedConnection` ctor and run the new test.

To introduce a similar timing hole with the new code, add the sleep before
`this.theConnection.registerListener(this);` in `TcpConnectionInterceptorSupport`.

Summary of changes:

`CachingClientConnectionFactory`
- register the underlying connection's listener in the ctor, utilizing the
    `TcpConnectionInterceptorSupport.registerListener()` method.
- fix `ErrorMessage` propagation.

`AbstractClientConnectionFactory`
- propagate the `enableManualListenerRegistration` to connections.

`TcpConnectionSuport`
- implement delay when manual listener registration is enabled.

Add test case.

Fix Failover Tests

`FailoverClientConnectionFactory`
- propagate enable manual listener registration to underlying factories

Polishing
2015-06-05 21:05:36 -04:00
Gary Russell
3339313ba7 INT-3722: Additional Fix: TCP OG with Caching CF
JIRA: https://jira.spring.io/browse/INT-3722

While the initial fix solved the reported problem, it caused a memory leak when
the gateway completed its work before the reader thread "closed" the connection,
releasing it to the pool. This left the connection in the deferred close state.

Handle the condition where the gateway signals it has completed its work
before the connection is released to the pool.
2015-05-27 12:30:05 -04:00
Gary Russell
d17785db12 Fix TCP Gateway Integration Test
Definitively wait for the connection to be returned instead of a simple sleep.
2015-05-27 10:19:38 -04:00
Gary Russell
22fb524515 INT-3722: Fix Timing Issue TCP OG and Cached CF
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.
2015-05-26 17:46:14 -04:00
Artem Bilan
183941ec07 INT-3705: Improve Messaging Annotations handling
JIRA: https://jira.spring.io/browse/INT-3705

* Add validation for annotation attributes which must be populated directly on the `MessageHandler` `@Bean` using setters
* Add `sendTimeout()` annotation attribute for all Messaging Annotations
* Remove `DEFAULT_SEND_TIMEOUT = 1000L` from `AbstractCorrelatingMessageHandler` to make its component consistent with all other
`AbstractMessageProducingHandler` implementation.
* Fix XSD docs and Reference Manual to say that default `send-timeout` for `AbstractMessageProducingHandler` components is `-1`, not `one second`
* Make all Messaging Annotations attributes as `String` to allow to configure through the Property Placeholder options
* Fix a couple of typos

Polishing
2015-04-23 14:15:08 +01:00
Artem Bilan
2bde14b742 INT-3661: Fix the eager BF access from BPPs (P I)
JIRA: https://jira.spring.io/browse/INT-3661

Previously there were a lot of noise from the `PostProcessorRegistrationDelegate$BeanPostProcessorChecker` for early access for beans.
That may produce some side-effects when some of `BeanFactoryPostProcessor`s won't adjust those beans.

The issue is based on two facts:
1. Loading beans from `BPP`, e.g. `IntegrationEvaluationContextAwareBeanPostProcessor` (or `ChannelSecurityInterceptorBeanPostProcessor` - https://jira.spring.io/browse/INT-3663)
2. Loading beans from `setBeanFactory()/setApplicationContext()` container methods

* Move all code from `setBeanFactory()` with access to the `BeanFactory` (e.g. `this.messageBuilderFactory = IntegrationUtils.getMessageBuilderFactory(this.beanFactory);`)
to some other lazy-load methods like `getMessageBuilderFactory()`
* Fix parser tests to remove `messageBuilderFactory` tests since there is no activity for target components to lazy-load them
* Polish some test according the new lazy-load logic
* Rework `IntegrationEvaluationContextAwareBeanPostProcessor` to the `SmartInitializingSingleton` and make it `Ordered`
* Populate `beanFactory` for the internal instance of `connectionFactory` in the `TcpSyslogReceivingChannelAdapter`
* Populate `beanFactory` for the internal `UnicastReceivingChannelAdapter` in the `UdpSyslogReceivingChannelAdapter`
* Add `log.info` that `UdpSyslogReceivingChannelAdapter` overrides `outputChannel` for the provided `UnicastReceivingChannelAdapter`
* Change the internal `MessageChannel` in the `UdpSyslogReceivingChannelAdapter` to the `FixedSubscriberChannel` for better performance

* Fix `AbstractExpressionEvaluator`
* Add JavaDocs for the `IntegrationEvaluationContextAware`

Fix `MongoDbMessageStoreClaimCheckIntegrationTests`

Addressing PR comments
2015-03-02 18:23:44 -05:00
Gary Russell
40c4cb0d41 INT-3635: TCP GW: Add remoteTimeoutExpression
JIRA: https://jira.spring.io/browse/INT-3635

Add an expression as an alternative to `remote-timeout`.

INT-3635: Tcp GW Docs

Also removed the relationship between reply-timeout and
remote-timeout (introduced in 2.2 to provide backward compatibility
after the incorrect use of the reply-timeout attribute).

* Add log for Thread interruption state to the `EnableIntegrationTests`: https://build.spring.io/browse/INT-B41-JOB1-233
2015-03-02 13:39:56 +02:00
Gary Russell
80a45715ac INT-3628: Use SchedulingAwareRunner for Long Tasks
JIRA: https://jira.spring.io/browse/INT-3628

Certain tasks in Spring Integration are long running. Indicate
so for the benefit of platforms such as WebLogic that can log warnings
for long running tasks otherwise.

Also fix conflicting versions of commons-io.
2015-02-28 15:16:07 +02:00
Gary Russell
beeb49d55b INT-3577: Remove flush() from TCP Serializers
JIRA: https://jira.spring.io/browse/INT-3577

It is no longer necessary to `flush()` the `BufferedOutputStream`.

Since INT-3575, the `TcpNetConnection` has flushed the stream.

The `TcpNioConnection` now does so too.

* Add `id` for the `<section>`s in the `whats-new.xml`
2015-02-28 15:03:52 +02:00
Gary Russell
8cba6e6d67 INT-3652: Fix NPE: TCP Caching Connection Factory
JIRA: https://jira.spring.io/browse/INT-3652
2015-02-19 22:08:21 +02:00
Gary Russell
b56a56e8e6 INT-3650: Fix TCP Caching Factory Configuration
JIRA: https://jira.spring.io/browse/INT-3650

Don't propagate `setSingleUse` to the target factory.

* Polishing for code style
* Fix `CachingClientConnectionFactory#equals`
2015-02-19 13:17:28 +02:00
Gary Russell
f4e775ec18 INT-3646: Add TCP Server Exception Events
JIRA: https://jira.spring.io/browse/INT-3646

Publish `TcpConnectionServerExceptionEvent`s when unexpected
exceptions occur on server sockets.

INT-3646: Polishing
Fix Reactor tests
2015-02-18 20:17:45 +02:00
Artem Bilan
f248394682 INT-3589: Upgrade Dependencies
JIRA: https://jira.spring.io/browse/INT-3589, https://jira.spring.io/browse/INT-3624

* SF - 4.2. Fix Breaking changes for the `ApplicationEventPublisher`
* AMQP 1.5. Without issues
* Reactor - 2.0. Fix for the new `Stream` foundation
* jsonPath - 1.2.0. Fix for new `Predicate` abstraction. Add 'fail-fast error' to the `IntegrationRegistrar`
* Sshd - 0.13.0. Fix for new `VirtualFileSystemFactory` usage
* Spring Data - Fowler
* And others without issues
* Get rid of `reactor.util.StringUtils` usage

INT-3589: Address PR comments

Polishing
2015-02-17 15:09:09 -05:00
Gunnar Hillert
8c81cffd27 INT-3629: Upgrade to Gradle 2.3
JIRA: https://jira.spring.io/browse/INT-3629

Fix Sonar Build
`build.gradle` polishing
2015-02-16 16:26:43 +02:00
Artem Bilan
8c11d7a377 INT-3580: Polishing to the last STOMP tests fix
JIRA: https://jira.spring.io/browse/INT-3580

* Uncomment `org.springframework.integration.ip` category for the IP tests `log4j.properties`
* Since all tests in the `StompIntegrationTests` uses the same application context and therefore the same `SubscriptionRegistry`
the `waitForSubscribe()` should wait exactly for that `subscription` in which it is interested in.
The previous fix wasn't enough
2015-02-13 10:52:52 +02:00
Gary Russell
b7d64d12da Fix Race Condition in Test Interceptor (TCP)
The HelloWorldInterceptor (server side) set the
negotiated flag after sending the handshake back.
The next message could be received before the flag
was set and caused the test to fail.

Synchronize the server-side handshaking code so that
we don't start processing the next message before
the negotiated flag is set.

Leave the diagnostic log settings in place for now.
2015-02-12 17:00:29 -05:00
Gary Russell
7e8ad682f2 Add TCP Interceptor Test Diagnostics 2015-02-12 13:25:22 -05:00
Gary Russell
632740d2cf INT-3626: More Sonar Fixes
JIRA: https://jira.spring.io/browse/INT-3626

Remove Direct Array Usages.

With the increased use of java configuration and DSL, it
is no longer safe to directly use array arguments.

(Except in simple wrapper objects).

Avoid (or mark //NOSONAR) catch Throwable.

Remove unused field.
2015-02-11 18:12:48 -05:00
Gary Russell
195ee70568 INT-3632: Sonar Improvements
JIRA: https://jira.spring.io/browse/INT-3632

- Use Map.entrySet()
- Double check locking only works when the field(s) are volatile
- Remove unnecessary instanceof tests
2015-02-10 18:00:07 -05:00
Gary Russell
15eb01169d INT-3581: Support selector-expression on WireTap
JIRA: https://jira.spring.io/browse/INT-3581

Move schemas to 4.2.

Add `selector-expression` to `<wire-tap/>`.

INT-3781: Fix What's New

Bump Namespace Version to 4.2
2015-01-13 15:32:06 -05:00
Gary Russell
af601c3096 INT-3578 Fix IllegalArgumentException
JIRA: https://jira.spring.io/browse/INT-3578

Adding `readDelay` to XML namespace for the `TcpConnectionFactoryFactoryBean`
caused an `IllegalArgumentException` when configuring with Java instea of
XML.

Polishing
2014-12-12 11:18:14 +02:00
Artem Bilan
f89963dc9b INT-3575 TcpNetConnection: flush stream in send()
JIRA: https://jira.spring.io/browse/INT-3575
2014-12-11 19:09:12 +02:00
Artem Bilan
869a8de05f INT-275: Implement Scatter-Gather Pattern
JIRA: https://jira.spring.io/browse/INT-275

In addition fix the `Lifecycle` issue in the `ServiceActivatorAnnotationPostProcessor`

Add Namespace support, Addition tests
   and fix some typos in the XSD

INT-275: Fix failed tests

INT-275: Fix for `replyChannel` Header

Add `sync` reply test-case

INT-275: Make `ScatterGatherHandler` sync

Fix some `MessageHandler`s from `SmartLifecycle`

INT-275: Fix `ScatterGatherHandler.handleRequestMessage` logic

INT-275: Fix `ScatterGatherHandler` JMX proxying issues

* Make `AbstractCorrelatingMessageHandler.getMessageStore()` as `public`
* Move `ScatterGatherHandlerIntegrationTests` to the JMX module to be sure that `ScatterGatherHandler`
works well with `@EnableIntegrationMBeanExport`
* Add xml config sample how to use an internal gatherer's `MessageStore` in the `MessageGroupStoreReaper`
* Add `What's New` notice
2014-10-21 15:14:34 -04:00
Gary Russell
a7b5158f4a INT-3524 Fix Tooling MessageChannel References
JIRA: https://jira.spring.io/browse/INT-3524

A number of references (expected-type) still referred to
the Spring Integration 3.0 MessageChanel.
2014-10-03 07:55:23 +01:00
Gary Russell
e4eac27b12 INT-3507 TCP - Use BufferedOutputStreams
JIRA: https://jira.spring.io/browse/INT-3507

TcpNoDelay (false) helps to buffer IOs but only after the
first write.

Use `BufferedOutputStreams` for TCP writes.

Use the socket `sendBufferSize` for the buffer size.
2014-08-28 17:35:35 -04:00
Artem Bilan
f84e798272 INT-3370: Add BoonJsonObjectMapper
JIRA: https://jira.spring.io/browse/INT-3370

* Add `BoonJsonObjectMapper`
* Provide some tests
* Remove deprecations
* Polishing test according removed deprecations
* Change `JsonObjectMapper#populateJavaTypes` to get deal with `payload`, not its `class`,
since we can't (and Jackson's `TypeFactory`, too) determine generic type from `Collection`.
Use `iterators` instead to retrieve the type from the first item.

Conflicts:
	build.gradle
	spring-integration-amqp/src/test/java/org/springframework/integration/amqp/support/DefaultAmqpHeaderMapperTests.java

INT-3370: Polishing according PR comments

* Apply Gary's polishing to the Docs
* Fix `RecipientListRouter` JavaDoc warn
* Fix typo in test name for `UdpUnicastEndToEndTests`
* Fix `RedisQueueOutboundChannelAdapterTests` do not use Jackson 1.x

Final Polish
2014-08-20 14:00:03 -04:00
Artem Bilan
a64b53a1b5 INT-3473: Set Inactive TcpNioFactory Before Stop
JIRA: https://jira.spring.io/browse/INT-3473

A simple fix to prevent `Selector closed` error loging message on `TcpNioServerConnectionFactory#stop()`

Polishing
2014-07-17 15:37:05 -04:00
Artem Bilan
c309b031f8 INT-3449: TCP: read-delay for XML Configuration
JIRA: https://jira.spring.io/browse/INT-3449

Doc Polishing
2014-07-07 12:01:20 -04:00
Gary Russell
5aee3c85ba INT-3453 NIO Always Release Assembler Thread
Fixed hung assembler described in INT-3453.

Used CountDownLatch instead of sleep()

INT-3453 Add Test Case

Currently failing for me - assembler thread stuck on CDL.

Remove redundant `if (TcpNioConnection.this.writingLatch != null)` from `ChannelInputStream#write`
2014-06-27 18:23:04 +03:00
Artem Bilan
7e0eb7ad4e Revert "Fixed infinite loop described in INT-3453." 2014-06-25 16:36:39 +03:00