More websocket work

This commit is contained in:
James Agnew 2017-01-11 22:12:41 -05:00
parent 47a81ebd8f
commit a8eb4a1967
4 changed files with 106 additions and 25 deletions

View File

@ -25,42 +25,48 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.handler.PerConnectionWebSocketHandler; import org.springframework.web.socket.handler.PerConnectionWebSocketHandler;
import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;
import ca.uhn.fhir.jpa.subscription.SubscriptionWebsocketHandlerDstu2; import ca.uhn.fhir.jpa.subscription.SubscriptionWebsocketHandlerDstu2;
@Configuration @Configuration
@EnableWebSocket() @EnableWebSocket()
@EnableWebMvc public class WebsocketDstu2Config implements WebSocketConfigurer {
@Controller
public class WebsocketDstu2Config extends WebMvcConfigurerAdapter implements WebSocketConfigurer {
@Override @Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry theRegistry) { public void registerWebSocketHandlers(WebSocketHandlerRegistry theRegistry) {
theRegistry.addHandler(subscriptionWebSocketHandler(), "/websocket/dstu2").setAllowedOrigins("*"); theRegistry.addHandler(subscriptionWebSocketHandler(), "/websocket/dstu2").setAllowedOrigins("*");
} }
@Override // @Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { // public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable(); // configurer.enable();
} // }
//
@Bean // @Bean
public ServletServerContainerFactoryBean createWebSocketContainer() { // public String containerInit() {
ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean(); // try {
container.setMaxTextMessageBufferSize(8192); // Class.forName("javax.websocket.WebSocketContainer");
container.setMaxBinaryMessageBufferSize(8192); // createWebSocketContainer();
return container; // } catch (ClassNotFoundException e) {
} // // ok
// }
//
// return "";
// }
//
// @Bean
// @Lazy
// public ServletServerContainerFactoryBean createWebSocketContainer() {
// ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
// container.setMaxTextMessageBufferSize(8192);
// container.setMaxBinaryMessageBufferSize(8192);
// return container;
// }
@Bean(autowire = Autowire.BY_TYPE) @Bean(autowire = Autowire.BY_TYPE)
public WebSocketHandler subscriptionWebSocketHandler() { public WebSocketHandler subscriptionWebSocketHandler() {

View File

@ -0,0 +1,78 @@
package ca.uhn.fhir.jpa.config;
/*
* #%L
* HAPI FHIR JPA Server
* %%
* Copyright (C) 2014 - 2016 University Health Network
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.handler.PerConnectionWebSocketHandler;
import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;
import ca.uhn.fhir.jpa.subscription.SubscriptionWebsocketHandlerDstu2;
@Configuration
@EnableWebSocket()
@Controller
@EnableWebMvc
public class WebsocketDstu2TomcatConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry theRegistry) {
theRegistry.addHandler(subscriptionWebSocketHandler(), "/websocket/dstu2");
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Bean
public ServletServerContainerFactoryBean createWebSocketContainer() {
ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
container.setMaxTextMessageBufferSize(8192);
container.setMaxBinaryMessageBufferSize(8192);
return container;
}
@Bean(autowire = Autowire.BY_TYPE)
public WebSocketHandler subscriptionWebSocketHandler() {
return new PerConnectionWebSocketHandler(SubscriptionWebsocketHandlerDstu2.class);
}
@Bean
public TaskScheduler websocketTaskScheduler() {
ThreadPoolTaskScheduler retVal = new ThreadPoolTaskScheduler();
retVal.setPoolSize(5);
return retVal;
}
}

View File

@ -17,6 +17,7 @@ import org.springframework.web.cors.CorsConfiguration;
import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.jpa.config.WebsocketDstu2Config; import ca.uhn.fhir.jpa.config.WebsocketDstu2Config;
import ca.uhn.fhir.jpa.config.WebsocketDstu2TomcatConfig;
import ca.uhn.fhir.jpa.config.dstu3.WebsocketDstu3Config; import ca.uhn.fhir.jpa.config.dstu3.WebsocketDstu3Config;
import ca.uhn.fhir.jpa.dao.DaoConfig; import ca.uhn.fhir.jpa.dao.DaoConfig;
import ca.uhn.fhir.jpa.dao.IFhirSystemDao; import ca.uhn.fhir.jpa.dao.IFhirSystemDao;
@ -105,7 +106,7 @@ public class TestRestfulServer extends RestfulServer {
myAppCtx.register(TdlDstu2Config.class); myAppCtx.register(TdlDstu2Config.class);
baseUrlProperty = FHIR_BASEURL_TDL2; baseUrlProperty = FHIR_BASEURL_TDL2;
} else { } else {
myAppCtx.register(TestDstu2Config.class, WebsocketDstu2Config.class); myAppCtx.register(TestDstu2Config.class, WebsocketDstu2TomcatConfig.class);
baseUrlProperty = FHIR_BASEURL_DSTU2; baseUrlProperty = FHIR_BASEURL_DSTU2;
} }
myAppCtx.refresh(); myAppCtx.refresh();

View File

@ -2,10 +2,6 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ./xsd/web-app_3_0.xsd"> version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ./xsd/web-app_3_0.xsd">
<absolute-ordering>
<name>spring_web</name>
</absolute-ordering>
<listener> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> </listener>