Commit Graph

8201 Commits

Author SHA1 Message Date
Juergen Hoeller
8b73c0affb Added ASM-based tests for custom scoping annotations
Issue: SPR-11574
2014-03-24 11:51:21 +01:00
Juergen Hoeller
7399723165 Introduced getFlashMapsMutex template method and optimized SessionFlashMapManager's locking
SessionFlashMapManager also clears the session attribute now when the given FlashMap List is empty.

Issue: SPR-11538
2014-03-24 11:16:56 +01:00
Juergen Hoeller
0af6e1bb1b MVC handler method detection ignores scoped targets in favor of proxies
Issue: SPR-11548
2014-03-24 11:02:03 +01:00
Rossen Stoyanchev
2f24bd24a8 Merge pull request #494 from rstoyanchev/doc-sockjs
Expand SockJS documentation
2014-03-23 23:15:03 -04:00
Rossen Stoyanchev
f25b7df552 Document heartbeat support in SockJS 2014-03-23 23:13:13 -04:00
Rossen Stoyanchev
b1a0b38d8f Document use of CORS headers in SockJS Service
Issue: SPR-11437
2014-03-23 22:52:14 -04:00
Rossen Stoyanchev
15188a8eee Document IE 8 and 9 related SockJS transport details
Issue: SPR-11496, SPR-11525
2014-03-23 22:52:13 -04:00
Rossen Stoyanchev
d30cb17c91 Polish SockJS documentation 2014-03-23 22:51:31 -04:00
Rossen Stoyanchev
7af74b2475 Disable SockJS heartbeat if STOMP heartbeat is on 2014-03-23 02:12:57 -04:00
Rossen Stoyanchev
2c6d6b524d Adjust SockJS scheduler core pool size
Issue: SPR-11556
2014-03-23 01:04:30 -04:00
Rossen Stoyanchev
7651f83b4c Polish 2014-03-23 01:01:39 -04:00
Rossen Stoyanchev
cbd5af3a03 Add CloseStatus to indicate unreliable session
When a send timeout is detected, the WebSocket session is now closed
with a custom close status that indicates so. This allows skipping
parts of the close logic that may cause further hanging.

Issue: SPR-11450
2014-03-23 00:51:33 -04:00
Rossen Stoyanchev
4028a3b0bc Remove synchronized keywords from SockJsSession impls
Before this change SockJsSession implementations of WebSocketSession
used synchronization around its method implementations protecting
internal state and ensuring only a single thread is sending messages
at a time.

A WebSocketSession is generally expected to be used from one thread
at a time and now that application messages are sent through
ConcurrentWebSocketSessionDecorator, there is no concern about
application messages sent from the different threads.

While there are some remaining concerns, those can be addressed
without using the synchronized keyword. This change removes it from
the methods of all SockJS session implementations.

Issue: SPR-11450
2014-03-22 22:59:48 -04:00
Rossen Stoyanchev
ffac748f1c Improve ConcurrentWebSocketSessionDecorator
Before this change the decorator ensured that for a specific WebSocket
session only one thread at a time can send a message. Other threads
attempting to send would have their messages buffered and each time
that occurs, a check is also made to see if the buffer limit has been
reached or the send time limit has been exceeded and if so the session
is closed.

This change adds further protection to ensure only one thread at a time
can perform the session limit checks and attempt to close the session.
Furthermore if the session has timed out and become unresponsive,
attempts to close it may block yet another thread. Taking this into
consideration this change also ensures that state associated with the
session is cleaned first before an attempt is made to close the session.

Issue: SPR-11450
2014-03-22 22:59:39 -04:00
Rossen Stoyanchev
299be08268 Remove synchronized block around WebSocketSession.send
Since we now wrap the WebSocketSession with a concurrent decorator, the
synchronized keyword around message sending needed to be removed.

Issue: SPR-11586
2014-03-21 11:42:23 -04:00
Sam Brannen
796af90ba7 Polish ASM-based annotation processing
- AnnotationAttributesReadingVisitor no longer processes annotations
  from the java.lang.annotation package.

- Simplified logic in AnnotationReadingVisitorUtils
  getMergedAnnotationAttributes().

Issue: SPR-11574
2014-03-21 15:26:13 +01:00
Juergen Hoeller
90e3dbb0f5 BufferedImageHttpMessageConverter ignores empty MIME types
Issue: SPR-11581
2014-03-21 14:43:03 +01:00
Juergen Hoeller
3aff973d13 Javadoc: @ComponentScan is subject to @Conditional as well
Issue: SPR-11579
2014-03-21 14:32:57 +01:00
Rossen Stoyanchev
929e9ca401 Raise MessageConversionException in @Payload resolver
If a payload is present but conversion returns null (meaning no
converter knows how to convert), raise a MessageConversionException
that provides information about the type we were trying to convert
to and the message itself whose headers (namely content-type) contain
crucial information required to debug the problem.

Issue: SPR-11577
2014-03-21 08:59:12 -04:00
Brian Clozel
26309838ba Set custom handshakeHandler for XML sockjs config
Prior to this commit, configuring a custom handshakeHandler when setting
up a stomp-endpoint with SockJS would not be taken into account:

  <websocket:stomp-endpoint path="/foo">
    <websocket:handshake-handler ref="customHandler"/>
    <websocket:sockjs/>
  </websocket:stomp-endpoint>

This commit fixes this by creating and registering a
WebsocketTransportHandler (with this handshakeHandler) as a
transportHandler override for the SockJSService.

Issue: SPR-11568
2014-03-21 10:00:11 +01:00
Rossen Stoyanchev
b7a974116e Add concurrent WebSocket session decorator (temp commit)
Issue: SPR-11586
2014-03-21 01:29:29 -04:00
Rossen Stoyanchev
ac968e94ed Add getter for the length of a WebSocket message 2014-03-20 21:19:18 -04:00
Rossen Stoyanchev
d4782647a4 Ensure default value of @Payload required is enforced
When no @Payload is provided, it is equivalent to @Payload with default
attribute values. Since the default value of required=true, then
an argument that's not annotated is required.
2014-03-20 19:44:19 -04:00
Stephane Nicoll
52c3f713bf Fix handling of required payload.
A payload that is required will now throw an appropriate exception
regardless of if a conversion is required or not.

isEmptyPayload now takes the payload instead of the message
so that both the original payload and the converted payload, if
necessary, share the same logic.

JSR-303 validation is now consistently applied.

Issue: SPR-11577
2014-03-20 16:43:33 -04:00
Stephane Nicoll
4cd818b9e4 Harmonize log configuration
Prior to this commit, the codebase was using a mix of log4j.xml
and log4j.properties for test-related logging configuration. This
can be an issue as log4j takes the xml variant first when looking
for a default bootstrap configuration.

In practice, some modules declaring the properties variant were
taking the xml variant configuration from another module.

The general structure of the configuration has also been
harmonized to provide a standard console output as well as an
easy way to enable trace logs for the current module.
2014-03-20 09:43:29 -07:00
Rossen Stoyanchev
10af128e96 Update thread pool settings in STOMP/WebSocket config
The clientInboundChannel and clientOutboundChannel now use twice
the number of available processors by default to accomodate for some
degree of blocking in task execution on average.

In practice these settings still need to be configured explicitly in
applications but these should serve as better default values than
the default values in ThreadPoolTaskExecutor.

Issue: SPR-11450
2014-03-20 00:45:37 -04:00
Sam Brannen
9cee70ff66 Polish ComponentScanParserTests and clean up warnings 2014-03-20 01:28:59 +01:00
Juergen Hoeller
ad09f1b5ec Upgraded embedded ASM version to 5.0
Issue: SPR-11239
2014-03-20 01:06:22 +01:00
Sam Brannen
99cd2f6098 Support meta-annotation overrides in ASM processing
Prior to this commit, Spring supported meta-annotation attribute
overrides in custom composed annotations with reflection-based
annotation processing but not with ASM-based annotation processing.

This commit ensures that meta-annotation attribute overrides are
supported in AnnotationMetadataReadingVisitor.getAnnotationAttributes().

Issue: SPR-11574
2014-03-19 23:44:13 +01:00
Rossen Stoyanchev
1bab8a3916 Add session attributes to SimpMessageHeaderAccessor
This change exposes the WebSocketSession attributes through a message header.
The StompSubProtocolHandler adds this to incoming messages.
For now messaging handling  methods can access the map via @Header, e.g.:

@Header(StompHeaderAccessor.SESSION_ATTRIBUTES) Map<String, Object> attrs) {

Issue: SPR-11566
2014-03-19 13:45:40 -04:00
Rossen Stoyanchev
48b62e80d5 Rename handshakeAttributes to just attributes
Issue: SPR-11566
2014-03-19 12:25:08 -04:00
Rossen Stoyanchev
1fa4a7d34f Fix minor issue in STOMP broker relay 2014-03-19 10:35:48 -04:00
Rossen Stoyanchev
9552c82e2d Remove use of simple executor in WebSocket clients
Issue: SPR-11580
2014-03-19 10:24:48 -04:00
Sam Brannen
8aefcb9a55 Set DB_CLOSE_ON_EXIT=false in H2EmbeddedDbConfig
This commit sets the DB_CLOSE_ON_EXIT flag to false for embedded H2
databases loaded using H2EmbeddedDatabaseConfigurer (i.e., via Spring's
<jdbc:embedded-database /> XML namespace, EmbeddedDatabaseBuilder,
EmbeddedDatabaseFactory, and EmbeddedDatabaseFactoryBean).

Issue: SPR-11573
2014-03-19 01:22:46 +01:00
Sam Brannen
dc6d67510d Improve configurability of EmbeddedDatabaseBuilder
This commit improves the configurability of EmbeddedDatabaseBuilder by
exposing the following new configuration methods.

 - setDataSourceFactory(DataSourceFactory)
 - addScripts(String...)
 - setScriptEncoding(String)
 - setSeparator(String)
 - setCommentPrefix(String)
 - setBlockCommentStartDelimiter(String)
 - setBlockCommentEndDelimiter(String)
 - continueOnError(boolean)
 - ignoreFailedDrops(boolean)

If more fine grained control over the configuration of the embedded
database is required, users are recommended to use
EmbeddedDatabaseFactory with a ResourceDatabasePopulator and forego use
of the builder.

Issue: SPR-11410
2014-03-18 23:56:31 +01:00
Sam Brannen
34fe252acd Polish Javadoc for embedded database support 2014-03-18 23:56:31 +01:00
Juergen Hoeller
373f07b1ff Polishing 2014-03-18 22:30:32 +01:00
Juergen Hoeller
e0757e7ed6 Detect ControllerAdvice beans in ancestor contexts as well
Issue: SPR-11570
2014-03-18 22:29:50 +01:00
Sam Brannen
b640b9fdfe Update TODOs for SPR-11574
Issue: SPR-11574
2014-03-18 18:33:26 +01:00
Sam Brannen
9ce0df89ff Support Class meta-annotation attributes with ASM
Prior to this commit, AnnotationAttributesReadingVisitor treated Class
annotation attributes as Strings instead of Classes. As a result,
look-ups for Class attributes in meta-annotations failed with an
IllegalArgumentException.

This commit fixes this issue by consistently treating Class attributes
as Classes in AnnotationAttributesReadingVisitor.

Issue: SPR-11557
2014-03-18 18:20:15 +01:00
Sam Brannen
42690a9a9e Overhaul Javadoc for embedded database support 2014-03-18 12:54:40 +01:00
Sam Brannen
c61d62ef4b Improve DataSourceInitializer Javadoc and implementation 2014-03-18 12:54:02 +01:00
Sam Brannen
87e58a6d7b Improve Javadoc for DatabasePopulator 2014-03-18 12:52:59 +01:00
Rossen Stoyanchev
df98490f0d Increase logging for spring-messaging tests
A temporary measure related to intermittent CI build server failures.
2014-03-17 22:32:01 -04:00
Sebastien Deleuze
fb600857df Document locale convention in Tiles def file names
In Tiles v3 integration, underscores in filenames are
intended to identify the definition locale. This behavior
is now documented in order to avoid unexpected results
with filenames like tiles_definitions.xml.

This commit also updates Tiles v2 references to Tiles v3
in the Spring reference documentation.

Issue: SPR-11491
2014-03-17 21:37:37 -04:00
Sebastien Deleuze
aac409c6cf Fix "Configuring the WebSocket Engine" documentation
This commit updates reference documentation in order
to specify that ServletServerContainerFactoryBean is for
server side use and WebSocketContainerFactoryBean
for client side use.

Issue: SPR-11565
2014-03-17 21:20:50 -04:00
Rossen Stoyanchev
a372b683cd Use custom config read in ReactorTcpClient
Use a custom ConfigReader to enforce the use of SynchronousDispatcher
and no other dispatchers otherwise created by default. Avoids the
creation thread pools never to be used.
2014-03-17 21:13:14 -04:00
Juergen Hoeller
38e7c4776b Cache.get(key, type) should also work in case of null value found in cache
Issue: SPR-11567
2014-03-18 00:50:59 +01:00
Rossen Stoyanchev
57af56aeeb Improve logging in STOMP broker relay
Ignore DISCONNECT messages if already disconnected. This can occur if
the client explicitly sends a DISCONNECT frame and then closes the
socket quickly. The closing of the WebSocket sessions also sends a
DISCONNECT upstream to ensure the broker is aware.
2014-03-17 17:11:15 -04:00
Rossen Stoyanchev
918e21fd8f Upgrade to reactor 1.0.1.RELEASE 2014-03-17 17:10:53 -04:00