diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java index 0de5f39a8d..c701c3ae43 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -76,7 +76,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess private boolean active = false; - private boolean running = false; + private volatile boolean running = false; private final List pausedTasks = new LinkedList(); @@ -344,9 +344,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess */ @Override public final boolean isRunning() { - synchronized (this.lifecycleMonitor) { - return (this.running && runningAllowed()); - } + return (this.running && runningAllowed()); } /** diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/SimpAnnotationMethodMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/SimpAnnotationMethodMessageHandler.java index 814ab49527..1c67f32f9d 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/SimpAnnotationMethodMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/SimpAnnotationMethodMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -111,10 +111,10 @@ public class SimpAnnotationMethodMessageHandler extends AbstractMethodMessageHan private MessageHeaderInitializer headerInitializer; - private final Object lifecycleMonitor = new Object(); - private volatile boolean running = false; + private final Object lifecycleMonitor = new Object(); + /** * Create an instance of SimpAnnotationMethodMessageHandler with the given @@ -298,9 +298,7 @@ public class SimpAnnotationMethodMessageHandler extends AbstractMethodMessageHan @Override public final boolean isRunning() { - synchronized (this.lifecycleMonitor) { - return this.running; - } + return this.running; } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractBrokerMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractBrokerMessageHandler.java index af7690661d..eb17ff80e1 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractBrokerMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractBrokerMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -153,9 +153,7 @@ public abstract class AbstractBrokerMessageHandler @Override public void start() { synchronized (this.lifecycleMonitor) { - if (logger.isInfoEnabled()) { - logger.info("Starting..."); - } + logger.info("Starting..."); this.clientInboundChannel.subscribe(this); this.brokerChannel.subscribe(this); if (this.clientInboundChannel instanceof InterceptableChannel) { @@ -173,9 +171,7 @@ public abstract class AbstractBrokerMessageHandler @Override public void stop() { synchronized (this.lifecycleMonitor) { - if (logger.isInfoEnabled()) { - logger.info("Stopping..."); - } + logger.info("Stopping..."); stopInternal(); this.clientInboundChannel.unsubscribe(this); this.brokerChannel.unsubscribe(this); @@ -206,9 +202,7 @@ public abstract class AbstractBrokerMessageHandler */ @Override public final boolean isRunning() { - synchronized (this.lifecycleMonitor) { - return this.running; - } + return this.running; } /** diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/user/UserDestinationMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/user/UserDestinationMessageHandler.java index 77a3528983..c6383aff04 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/user/UserDestinationMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/user/UserDestinationMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -64,10 +64,10 @@ public class UserDestinationMessageHandler implements MessageHandler, SmartLifec private MessageHeaderInitializer headerInitializer; - private final Object lifecycleMonitor = new Object(); - private volatile boolean running = false; + private final Object lifecycleMonitor = new Object(); + /** * Create an instance with the given client and broker channels subscribing @@ -180,9 +180,7 @@ public class UserDestinationMessageHandler implements MessageHandler, SmartLifec @Override public final boolean isRunning() { - synchronized (this.lifecycleMonitor) { - return this.running; - } + return this.running; } diff --git a/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointManager.java b/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointManager.java index 61253e025c..f88326a43a 100644 --- a/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointManager.java +++ b/spring-tx/src/main/java/org/springframework/jca/endpoint/GenericMessageEndpointManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -156,7 +156,7 @@ public class GenericMessageEndpointManager implements SmartLifecycle, Initializi private int phase = Integer.MAX_VALUE; - private boolean running = false; + private volatile boolean running = false; private final Object lifecycleMonitor = new Object(); @@ -318,9 +318,7 @@ public class GenericMessageEndpointManager implements SmartLifecycle, Initializi */ @Override public boolean isRunning() { - synchronized (this.lifecycleMonitor) { - return this.running; - } + return this.running; } /** diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/ConnectionManagerSupport.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/ConnectionManagerSupport.java index 7146a59395..f5638ea833 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/ConnectionManagerSupport.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/ConnectionManagerSupport.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,15 +38,14 @@ public abstract class ConnectionManagerSupport implements SmartLifecycle { protected final Log logger = LogFactory.getLog(getClass()); - private final URI uri; private boolean autoStartup = false; - private boolean running = false; - private int phase = Integer.MAX_VALUE; + private volatile boolean running = false; + private final Object lifecycleMonitor = new Object(); @@ -161,9 +160,7 @@ public abstract class ConnectionManagerSupport implements SmartLifecycle { */ @Override public boolean isRunning() { - synchronized (this.lifecycleMonitor) { - return this.running; - } + return this.running; } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/JettyWebSocketClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/JettyWebSocketClient.java index d0cd29afa5..813c9ca15c 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/JettyWebSocketClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/JettyWebSocketClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -60,8 +60,6 @@ public class JettyWebSocketClient extends AbstractWebSocketClient implements Lif private final org.eclipse.jetty.websocket.client.WebSocketClient client; - private final Object lifecycleMonitor = new Object(); - private AsyncListenableTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor(); @@ -99,47 +97,33 @@ public class JettyWebSocketClient extends AbstractWebSocketClient implements Lif return this.taskExecutor; } - @Override - public boolean isRunning() { - synchronized (this.lifecycleMonitor) { - return this.client.isStarted(); - } - } @Override public void start() { - synchronized (this.lifecycleMonitor) { - if (!isRunning()) { - try { - if (logger.isInfoEnabled()) { - logger.info("Starting Jetty WebSocketClient"); - } - this.client.start(); - } - catch (Exception ex) { - throw new IllegalStateException("Failed to start Jetty client", ex); - } - } + try { + this.client.start(); + } + catch (Exception ex) { + throw new IllegalStateException("Failed to start Jetty WebSocketClient", ex); } } @Override public void stop() { - synchronized (this.lifecycleMonitor) { - if (isRunning()) { - try { - if (logger.isInfoEnabled()) { - logger.info("Stopping Jetty WebSocketClient"); - } - this.client.stop(); - } - catch (Exception ex) { - logger.error("Error stopping Jetty WebSocketClient", ex); - } - } + try { + this.client.stop(); + } + catch (Exception ex) { + logger.error("Failed to stop Jetty WebSocketClient", ex); } } + @Override + public boolean isRunning() { + return this.client.isStarted(); + } + + @Override public ListenableFuture doHandshake(WebSocketHandler webSocketHandler, String uriTemplate, Object... uriVars) { diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java index 15e47e2002..fce06bdb9b 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java @@ -102,10 +102,10 @@ public class SubProtocolWebSocketHandler private final Stats stats = new Stats(); - private final Object lifecycleMonitor = new Object(); - private volatile boolean running = false; + private final Object lifecycleMonitor = new Object(); + /** * Create a new {@code SubProtocolWebSocketHandler} for the given inbound and outbound channels. @@ -279,9 +279,7 @@ public class SubProtocolWebSocketHandler @Override public final boolean isRunning() { - synchronized (this.lifecycleMonitor) { - return this.running; - } + return this.running; } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/WebSocketStompClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/WebSocketStompClient.java index 3623508253..baa6aedb21 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/WebSocketStompClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/WebSocketStompClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -72,17 +72,16 @@ public class WebSocketStompClient extends StompClientSupport implements SmartLif private static final Log logger = LogFactory.getLog(WebSocketStompClient.class); - private final WebSocketClient webSocketClient; private int inboundMessageSizeLimit = 64 * 1024; private boolean autoStartup = true; - private boolean running = false; - private int phase = Integer.MAX_VALUE; + private volatile boolean running = false; + /** * Class constructor. Sets {@link #setDefaultHeartbeat} to "0,0" but will diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractHandshakeHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractHandshakeHandler.java index e4b23ff71c..24e3b84f85 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractHandshakeHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractHandshakeHandler.java @@ -186,10 +186,6 @@ public abstract class AbstractHandshakeHandler implements HandshakeHandler, Life return StringUtils.toStringArray(this.supportedProtocols); } - @Override - public boolean isRunning() { - return this.running; - } @Override public void start() { @@ -219,6 +215,11 @@ public abstract class AbstractHandshakeHandler implements HandshakeHandler, Life } } + @Override + public boolean isRunning() { + return this.running; + } + @Override public final boolean doHandshake(ServerHttpRequest request, ServerHttpResponse response, diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java index ae814653d9..b097d3e8db 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; - import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -119,10 +118,6 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler, Lifecycl } } - @Override - public boolean isRunning() { - return this.running; - } @Override public void start() { @@ -144,6 +139,11 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler, Lifecycl } } + @Override + public boolean isRunning() { + return this.running; + } + @Override public void handleRequest(HttpServletRequest servletRequest, HttpServletResponse servletResponse) diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/AbstractXhrTransport.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/AbstractXhrTransport.java index c6c6b9dc1e..987e62ae79 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/AbstractXhrTransport.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/AbstractXhrTransport.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -64,8 +64,7 @@ public abstract class AbstractXhrTransport implements XhrTransport { @Override public List getTransportTypes() { - return (isXhrStreamingDisabled() ? - Collections.singletonList(TransportType.XHR) : + return (isXhrStreamingDisabled() ? Collections.singletonList(TransportType.XHR) : Arrays.asList(TransportType.XHR_STREAMING, TransportType.XHR)); } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/JettyXhrTransport.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/JettyXhrTransport.java index 80297452eb..18b0e466a1 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/JettyXhrTransport.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/JettyXhrTransport.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,8 @@ import java.io.ByteArrayOutputStream; import java.net.URI; import java.nio.ByteBuffer; import java.util.Enumeration; +import java.util.List; +import java.util.Map; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; @@ -83,7 +85,7 @@ public class JettyXhrTransport extends AbstractXhrTransport implements Lifecycle } } catch (Exception ex) { - throw new SockJsException("Failed to start " + this, ex); + throw new SockJsException("Failed to start JettyXhrTransport", ex); } } @@ -95,7 +97,7 @@ public class JettyXhrTransport extends AbstractXhrTransport implements Lifecycle } } catch (Exception ex) { - throw new SockJsException("Failed to stop " + this, ex); + throw new SockJsException("Failed to stop JettyXhrTransport", ex); } } @@ -156,9 +158,9 @@ public class JettyXhrTransport extends AbstractXhrTransport implements Lifecycle private static void addHttpHeaders(Request request, HttpHeaders headers) { - for (String name : headers.keySet()) { - for (String value : headers.get(name)) { - request.header(name, value); + for (Map.Entry> entry : headers.entrySet()) { + for (String value : entry.getValue()) { + request.header(entry.getKey(), value); } } } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/TransportHandlingSockJsService.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/TransportHandlingSockJsService.java index 465762f4ef..99d39c3c72 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/TransportHandlingSockJsService.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/TransportHandlingSockJsService.java @@ -78,7 +78,7 @@ public class TransportHandlingSockJsService extends AbstractSockJsService implem private ScheduledFuture sessionCleanupTask; - private boolean running; + private volatile boolean running; /** diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/WebSocketTransportHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/WebSocketTransportHandler.java index 6915512068..7a66b6c16e 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/WebSocketTransportHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/WebSocketTransportHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,6 @@ package org.springframework.web.socket.sockjs.transport.handler; import java.util.Map; - import javax.servlet.ServletContext; import org.springframework.context.Lifecycle; @@ -53,11 +52,11 @@ public class WebSocketTransportHandler extends AbstractTransportHandler private final HandshakeHandler handshakeHandler; - private boolean running; + private volatile boolean running; public WebSocketTransportHandler(HandshakeHandler handshakeHandler) { - Assert.notNull(handshakeHandler, "handshakeHandler must not be null"); + Assert.notNull(handshakeHandler, "HandshakeHandler must not be null"); this.handshakeHandler = handshakeHandler; } @@ -78,10 +77,6 @@ public class WebSocketTransportHandler extends AbstractTransportHandler } } - @Override - public boolean isRunning() { - return this.running; - } @Override public void start() { @@ -103,6 +98,12 @@ public class WebSocketTransportHandler extends AbstractTransportHandler } } + @Override + public boolean isRunning() { + return this.running; + } + + @Override public boolean checkSessionType(SockJsSession session) { return session instanceof WebSocketServerSockJsSession;