TCP streams have no standard message structure. Therefore, the
TCP implementation previously only transferred the message
payload.
If someone wanted to convey header information, they would have
to write their own wrapper and/or use Java serialization for
the entire message.
This change provides a strategy to allow users to determine
which headers are transferred, and how.
A MessageConvertingMessageMapper is now provided that invokes
any MessageConverter. A MapMessageConverter is provided that
converts the payload, and selected heades to a Map with two
entries ("payload") and ("headers").
A MapJsonSerializer is provided that converts a Map to/from
JSON. Jackson can't delimit multiple objects in a stream
so another serializer is required to encode/decode structure.
A ByteArrayLfSerializer is used by default, inserting a
linefeed between JSON objects.
The combination of these elements now allows header
information to be transferred over TCP. Of course, users
can implment their own (de)serializer to format the
bits on the wire exactly as needed by their application.
INT-1807 Polishing
Add a test that uses a Map MessageConverter with a
Java (de)serializer.
INT-1807: Polishing
INT-1807: Rebased and polished
Change `MapJsonSerializer` to use `JsonObjectMapper` abstraction
Doc Polishing
Spring 3.2.3 registers MBean operations with parameter names
instead of the JVM default p1, p2 etc based on parameter position
in the method signature.
Since the OperationInvokingMessageHandler matched the supplied
arguments using the p1, p2 etc names, this prevented the control
bus from finding the target method.
Fall back to the old naming scheme based on parameter position
if a matching parameter is not found.
Add a test using a Map payload to supply the named arguments (p1, p2).
Add an ignored test that tests using named arguments (key, channelName).
Test with 3.1.4; remove Ignore and test with 3.2.3.
TODO: remove the Ignore annotation when SF 3.2.3 is the minimum.
The 'cache-sessions' attribute was deprecated in 2.1 in favor
of using a configured CachingConnectionFactory to provide more
flexibility, such as setting the cache size.
Remove the attribute from the schemas.
Update tests.
Add docs.
Update Migration Guide on the project Wiki.
Use `com.eaio.uuid` by default and document how to replace
the default strategy.
Provide JDK and a simple incrementing incrementing implementation.
Add code to detect multiple contexts in the same classloaded using
the same strategy.
Add code to detect multiple IdGenerator beans and emit a WARN
instead of DEBUG, which is the case for no beans.
INT-3007 introduced a warning log when advising a non-message handler
class. However, the log was also emitted when other methods on a
real MessageHandler were invoked.
Suppress the message in these cases and improve the log by
including the concrete class for the method rather than the
interface on which the method is declared.
Allow an application to be informed of problems on the IMAP idle
thread by emitting an event containing the exception.
Introduce IntegrationApplicationEvent hierarchy for all
events emitted by SI components.
INT-3099 Polishing (PR Comments)
Separate TCP events into discrete subclasses.
INT-3030 Polishing; Docs, Tests
Add test cases for error channel support.
Dynamically discover available RMI port.
Add What's New and `<important/>` to reference.
INT-3094 Fix JSON Package Tangle
Move JSON 'discovery' classes to .support.json (used by
.json and .transformer - ObjectToMapTransformer)
INT-3094 Fix JSON Class Tangle
Separate factory methods to avoid class tangle.
Remove tight tangle between parser and mapper.
INT-3094 Fix Core Package Tangle
Move NamedComponent from .context to .support.context
(Used by .history, and .context references .store which references
.history through .util.)
INT-3094: fix 'support.json' package class-cycle
INT-3094 Polishing - PR Comments
Remove parser provider and make parsers public.
`<service-activator>` has had an attribute `requires-reply`,
but it wasn't available within `chain`.
Introduce new XSD type `serviceActivatorType`
and use it for root `<service-activator>` element and within `<chain>` as well.
JIRA: https://jira.springsource.org/browse/INT-3108
When writing files with this mode setting, the FWMH detected
that the final file already exists, but did not detect that
the temporary (default ....writing) file exists. This could
happen if two adapters were simulataneously processing the same
file.
Also, while a comment in the setter said an empty temp file
suffix is allowed, it did not work because the file rename
is performed unconditionally, fails, and throws an exception.
Add a check for the temporary file (if the suffix is not "").
Don't rename if the file was written in-place (no temp file suffix).
Add test cases for the FileExistsMode.IGNORE for both the final
and temporary files. Add a test where the temporary file suffix
is "", a ...writing file exists, the final file does not exist
and so is created by the handler. The ...writing file is untouched.
The JmsOutboundGateway's Listener container could throw
an NPE during connection recovery - while logging recovery
status.
The log attempts to include the destination description which
throws the NPE if there is no destination yet established.
Only attempt to get the description if the destination has
been established. And, even then, use a try/catch block
to prevent the NPE. Log the destination as 'null' in this
case.
Add a test case to detect the NPE by adding an ErrorHandlingTaskExecutor.
No errors should be detected with the fix in place.
INT-3080 Invoke RedisTemplate.afterPropertiesSet() when instantiating
programmatically.
INT-3084 Redis channel was incorrectly calling discard() during stop() (a multi-operation).
INT-3084 Fix timing issue in test (NPE)
JMS Outbound Gateway did not allow the specification of
a task executor on the <reply-listener/> element.
This could prevent the gateway being used with a
listener in a JEE container.
Allow setting a task-executor.
Add a bean name to the reply listener container so
that a default TE will create suitably named threads.
INT-3053 Polishing
Fix container bean name when the gateway has no
bean name.
When a remote flow throws a `MessagingException`, it is unwrapped
and the local `failedMessage` property is the remote failed
message instead of the message that arrived at the outbound
gateway.
Detect a remote MessagingException and wrapt it in a new
MessagingException so the `failedMessage` property is the
original message and the `failedMessage` on the cause is
the remote failed message.
Previously there was a concurrency race condition, where
`parameters` with `idCache` for poll Messages query had one state on building phase,
but had another one on execution phase.
* Introduce `ReentrantReadWriteLock` `idCacheLock` for operation around `idCache`
* Change `idCache` to simple `HashSet`, because thread-safety is guaranteed by `idCacheLock`
* Add a concurrency test-case, which failed before fix
JIRA: https://jira.springsource.org/browse/INT-2993
Provide an option to determine whether or not the discard
(and exception throwing if configured) occurs within the
advice chain (default), or after it completes.
INT-2938 Filter Discard Advice Option - Schema
Schema, parser, tests for option on filter element.
INT-2938 Polishing - PR Comments + Doc
INT-2938 Add to "What's New"
INT-2938 Polishing - Javadoc Typo
while merging: simplified to use boolean var only