11/*
2- * Copyright 2002-2017 the original author or authors.
2+ * Copyright 2002-2018 the original author or authors.
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
1616
1717package org .springframework .web .socket .config .annotation ;
1818
19- import java .util .Date ;
20- import java .util .concurrent .ScheduledFuture ;
21-
2219import org .springframework .context .annotation .Bean ;
2320import org .springframework .lang .Nullable ;
2421import org .springframework .scheduling .TaskScheduler ;
25- import org .springframework .scheduling .Trigger ;
2622import org .springframework .scheduling .concurrent .ThreadPoolTaskScheduler ;
23+ import org .springframework .util .Assert ;
2724import org .springframework .web .servlet .HandlerMapping ;
2825
2926/**
@@ -45,7 +42,9 @@ public class WebSocketConfigurationSupport {
4542 public HandlerMapping webSocketHandlerMapping () {
4643 ServletWebSocketHandlerRegistry registry = initHandlerRegistry ();
4744 if (registry .requiresTaskScheduler ()) {
48- registry .setTaskScheduler (initTaskScheduler ());
45+ TaskScheduler scheduler = defaultSockJsTaskScheduler ();
46+ Assert .notNull (scheduler , "Expected default TaskScheduler bean" );
47+ registry .setTaskScheduler (scheduler );
4948 }
5049 return registry .getHandlerMapping ();
5150 }
@@ -62,75 +61,34 @@ protected void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
6261 }
6362
6463 /**
65- * The default TaskScheduler to use if none is configured via
66- * {@link SockJsServiceRegistration#setTaskScheduler}, i.e.
64+ * The default TaskScheduler to use if none is registered explicitly via
65+ * {@link SockJsServiceRegistration#setTaskScheduler}:
6766 * <pre class="code">
6867 * @Configuration
6968 * @EnableWebSocket
7069 * public class WebSocketConfig implements WebSocketConfigurer {
7170 *
7271 * public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
73- * registry.addHandler(myWsHandler(), "/echo").withSockJS().setTaskScheduler(myScheduler());
72+ * registry.addHandler(myHandler(), "/echo")
73+ * .withSockJS()
74+ * .setTaskScheduler(myScheduler());
7475 * }
7576 *
7677 * // ...
7778 * }
7879 * </pre>
7980 */
8081 @ Bean
82+ @ Nullable
8183 public TaskScheduler defaultSockJsTaskScheduler () {
82- return initTaskScheduler ();
83- }
84-
85- private TaskScheduler initTaskScheduler () {
86- if (this .scheduler == null ) {
87- ServletWebSocketHandlerRegistry registry = initHandlerRegistry ();
88- if (registry .requiresTaskScheduler ()) {
89- ThreadPoolTaskScheduler threadPoolScheduler = new ThreadPoolTaskScheduler ();
90- threadPoolScheduler .setThreadNamePrefix ("SockJS-" );
91- threadPoolScheduler .setPoolSize (Runtime .getRuntime ().availableProcessors ());
92- threadPoolScheduler .setRemoveOnCancelPolicy (true );
93- this .scheduler = threadPoolScheduler ;
94- }
95- else {
96- this .scheduler = new NoOpScheduler ();
97- }
84+ if (initHandlerRegistry ().requiresTaskScheduler ()) {
85+ ThreadPoolTaskScheduler threadPoolScheduler = new ThreadPoolTaskScheduler ();
86+ threadPoolScheduler .setThreadNamePrefix ("SockJS-" );
87+ threadPoolScheduler .setPoolSize (Runtime .getRuntime ().availableProcessors ());
88+ threadPoolScheduler .setRemoveOnCancelPolicy (true );
89+ this .scheduler = threadPoolScheduler ;
9890 }
9991 return this .scheduler ;
10092 }
10193
102-
103- private static class NoOpScheduler implements TaskScheduler {
104-
105- @ Override
106- @ Nullable
107- public ScheduledFuture <?> schedule (Runnable task , Trigger trigger ) {
108- throw new IllegalStateException ("Unexpected use of scheduler." );
109- }
110-
111- @ Override
112- public ScheduledFuture <?> schedule (Runnable task , Date startTime ) {
113- throw new IllegalStateException ("Unexpected use of scheduler." );
114- }
115-
116- @ Override
117- public ScheduledFuture <?> scheduleAtFixedRate (Runnable task , Date startTime , long period ) {
118- throw new IllegalStateException ("Unexpected use of scheduler." );
119- }
120-
121- @ Override
122- public ScheduledFuture <?> scheduleAtFixedRate (Runnable task , long period ) {
123- throw new IllegalStateException ("Unexpected use of scheduler." );
124- }
125-
126- @ Override
127- public ScheduledFuture <?> scheduleWithFixedDelay (Runnable task , Date startTime , long delay ) {
128- throw new IllegalStateException ("Unexpected use of scheduler." );
129- }
130-
131- @ Override
132- public ScheduledFuture <?> scheduleWithFixedDelay (Runnable task , long delay ) {
133- throw new IllegalStateException ("Unexpected use of scheduler." );
134- }
135- }
13694}
0 commit comments