From a8eb4a196709116b9fa482f551ff8f2fbb264002 Mon Sep 17 00:00:00 2001 From: James Agnew Date: Wed, 11 Jan 2017 22:12:41 -0500 Subject: [PATCH] More websocket work --- .../fhir/jpa/config/WebsocketDstu2Config.java | 46 ++++++----- .../config/WebsocketDstu2TomcatConfig.java | 78 +++++++++++++++++++ .../ca/uhn/fhirtest/TestRestfulServer.java | 3 +- .../src/main/webapp/WEB-INF/web.xml | 4 - 4 files changed, 106 insertions(+), 25 deletions(-) create mode 100644 hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/WebsocketDstu2TomcatConfig.java diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/WebsocketDstu2Config.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/WebsocketDstu2Config.java index 0f0f14453ea..c5fcd6187aa 100644 --- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/WebsocketDstu2Config.java +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/WebsocketDstu2Config.java @@ -25,42 +25,48 @@ 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() -@EnableWebMvc -@Controller -public class WebsocketDstu2Config extends WebMvcConfigurerAdapter implements WebSocketConfigurer { +public class WebsocketDstu2Config implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry theRegistry) { theRegistry.addHandler(subscriptionWebSocketHandler(), "/websocket/dstu2").setAllowedOrigins("*"); } - @Override - public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { - configurer.enable(); - } - - @Bean - public ServletServerContainerFactoryBean createWebSocketContainer() { - ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean(); - container.setMaxTextMessageBufferSize(8192); - container.setMaxBinaryMessageBufferSize(8192); - return container; - } +// @Override +// public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { +// configurer.enable(); +// } +// +// @Bean +// public String containerInit() { +// try { +// Class.forName("javax.websocket.WebSocketContainer"); +// createWebSocketContainer(); +// } 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) public WebSocketHandler subscriptionWebSocketHandler() { diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/WebsocketDstu2TomcatConfig.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/WebsocketDstu2TomcatConfig.java new file mode 100644 index 00000000000..61f32b07899 --- /dev/null +++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/WebsocketDstu2TomcatConfig.java @@ -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; + } + +} diff --git a/hapi-fhir-jpaserver-uhnfhirtest/src/main/java/ca/uhn/fhirtest/TestRestfulServer.java b/hapi-fhir-jpaserver-uhnfhirtest/src/main/java/ca/uhn/fhirtest/TestRestfulServer.java index 3069eed77d8..7cdb16a3e7a 100644 --- a/hapi-fhir-jpaserver-uhnfhirtest/src/main/java/ca/uhn/fhirtest/TestRestfulServer.java +++ b/hapi-fhir-jpaserver-uhnfhirtest/src/main/java/ca/uhn/fhirtest/TestRestfulServer.java @@ -17,6 +17,7 @@ import org.springframework.web.cors.CorsConfiguration; import ca.uhn.fhir.context.FhirContext; 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.dao.DaoConfig; import ca.uhn.fhir.jpa.dao.IFhirSystemDao; @@ -105,7 +106,7 @@ public class TestRestfulServer extends RestfulServer { myAppCtx.register(TdlDstu2Config.class); baseUrlProperty = FHIR_BASEURL_TDL2; } else { - myAppCtx.register(TestDstu2Config.class, WebsocketDstu2Config.class); + myAppCtx.register(TestDstu2Config.class, WebsocketDstu2TomcatConfig.class); baseUrlProperty = FHIR_BASEURL_DSTU2; } myAppCtx.refresh(); diff --git a/hapi-fhir-jpaserver-uhnfhirtest/src/main/webapp/WEB-INF/web.xml b/hapi-fhir-jpaserver-uhnfhirtest/src/main/webapp/WEB-INF/web.xml index 06bfb571c43..8f294ce04c8 100644 --- a/hapi-fhir-jpaserver-uhnfhirtest/src/main/webapp/WEB-INF/web.xml +++ b/hapi-fhir-jpaserver-uhnfhirtest/src/main/webapp/WEB-INF/web.xml @@ -2,10 +2,6 @@ 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"> - - spring_web - - org.springframework.web.context.ContextLoaderListener