Add support for websockets

This commit is contained in:
James Agnew
2019-03-31 12:35:48 -04:00
parent a85beaff43
commit e2be963a0d
8 changed files with 27 additions and 44 deletions

View File

@@ -35,7 +35,7 @@ public class FhirServerConfigDstu2 extends BaseJavaConfigDstu2 {
@Bean() @Bean()
public LocalContainerEntityManagerFactoryBean entityManagerFactory() { public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean retVal = super.entityManagerFactory(); LocalContainerEntityManagerFactoryBean retVal = super.entityManagerFactory();
retVal.setPersistenceUnitName(HapiProperties.getPersistenceUnitName()); retVal.setPersistenceUnitName("HAPI_PU");
try { try {
retVal.setDataSource(myDataSource); retVal.setDataSource(myDataSource);

View File

@@ -35,7 +35,7 @@ public class FhirServerConfigDstu3 extends BaseJavaConfigDstu3 {
@Bean() @Bean()
public LocalContainerEntityManagerFactoryBean entityManagerFactory() { public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean retVal = super.entityManagerFactory(); LocalContainerEntityManagerFactoryBean retVal = super.entityManagerFactory();
retVal.setPersistenceUnitName(HapiProperties.getPersistenceUnitName()); retVal.setPersistenceUnitName("HAPI_PU");
try { try {
retVal.setDataSource(myDataSource); retVal.setDataSource(myDataSource);

View File

@@ -35,7 +35,7 @@ public class FhirServerConfigR4 extends BaseJavaConfigR4 {
@Bean() @Bean()
public LocalContainerEntityManagerFactoryBean entityManagerFactory() { public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean retVal = super.entityManagerFactory(); LocalContainerEntityManagerFactoryBean retVal = super.entityManagerFactory();
retVal.setPersistenceUnitName(HapiProperties.getPersistenceUnitName()); retVal.setPersistenceUnitName("HAPI_PU");
try { try {
retVal.setDataSource(myDataSource); retVal.setDataSource(myDataSource);

View File

@@ -32,9 +32,7 @@ public class HapiProperties {
static final String LOGGER_NAME = "logger.name"; static final String LOGGER_NAME = "logger.name";
static final String MAX_FETCH_SIZE = "max_fetch_size"; static final String MAX_FETCH_SIZE = "max_fetch_size";
static final String MAX_PAGE_SIZE = "max_page_size"; static final String MAX_PAGE_SIZE = "max_page_size";
static final String PERSISTENCE_UNIT_NAME = "persistence_unit_name";
static final String SERVER_ADDRESS = "server_address"; static final String SERVER_ADDRESS = "server_address";
static final String SERVER_BASE = "server.base";
static final String SERVER_ID = "server.id"; static final String SERVER_ID = "server.id";
static final String SERVER_NAME = "server.name"; static final String SERVER_NAME = "server.name";
static final String SUBSCRIPTION_EMAIL_ENABLED = "subscription.email.enabled"; static final String SUBSCRIPTION_EMAIL_ENABLED = "subscription.email.enabled";
@@ -201,10 +199,6 @@ public class HapiProperties {
return HapiProperties.getIntegerProperty(MAX_FETCH_SIZE, Integer.MAX_VALUE); return HapiProperties.getIntegerProperty(MAX_FETCH_SIZE, Integer.MAX_VALUE);
} }
public static String getPersistenceUnitName() {
return HapiProperties.getProperty(PERSISTENCE_UNIT_NAME, "HAPI_PU");
}
public static String getLoggerName() { public static String getLoggerName() {
return HapiProperties.getProperty(LOGGER_NAME, "fhirtest.access"); return HapiProperties.getProperty(LOGGER_NAME, "fhirtest.access");
} }
@@ -269,10 +263,6 @@ public class HapiProperties {
return HapiProperties.getProperty(CORS_ALLOWED_ORIGIN, "*"); return HapiProperties.getProperty(CORS_ALLOWED_ORIGIN, "*");
} }
public static String getServerBase() {
return HapiProperties.getProperty(SERVER_BASE, "/fhir");
}
public static String getServerName() { public static String getServerName() {
return HapiProperties.getProperty(SERVER_NAME, "Local Tester"); return HapiProperties.getProperty(SERVER_NAME, "Local Tester");
} }

View File

@@ -6,11 +6,12 @@ fhir_version=DSTU3
# This is the address that the FHIR server will report as its own address. # This is the address that the FHIR server will report as its own address.
# If this server will be deployed (for example) to an internet accessible # If this server will be deployed (for example) to an internet accessible
# server, put the DNS name of that server here. # server, put the DNS name of that server here.
server_address=http://localhost:8080/fhir/ #
# Note that this is also the address that the hapi-fhir-testpage-overlay
# This is the context path for the FHIR endpoint. If this is changed, the # (the web UI similar to the one at http://hapi.fhir.org) will use to
# setting above should also be changed. # connect internally to the FHIR server, so this also needs to be a name
server.base=/fhir # accessible from the server itself.
server_address=http://localhost:8080/hapi-fhir-jpaserver/fhir/
default_encoding=JSON default_encoding=JSON
etag_support=ENABLED etag_support=ENABLED

View File

@@ -13,8 +13,6 @@ import org.junit.AfterClass;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths; import java.nio.file.Paths;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
@@ -33,14 +31,13 @@ public class ExampleServerDstu2IT {
HapiProperties.forceReload(); HapiProperties.forceReload();
HapiProperties.setProperty(HapiProperties.FHIR_VERSION, "DSTU2"); HapiProperties.setProperty(HapiProperties.FHIR_VERSION, "DSTU2");
HapiProperties.setProperty(HapiProperties.DATASOURCE_URL, "jdbc:derby:memory:dbr2;create=true"); HapiProperties.setProperty(HapiProperties.DATASOURCE_URL, "jdbc:derby:memory:dbr2;create=true");
HapiProperties.setProperty(HapiProperties.TEST_PORT, Integer.toString(PortUtil.findFreePort()));
ourCtx = FhirContext.forDstu2(); ourCtx = FhirContext.forDstu2();
ourPort = HapiProperties.getTestPort(); ourPort = PortUtil.findFreePort();
} }
@Test @Test
public void testCreateAndRead() throws IOException { public void testCreateAndRead() {
ourLog.info("Base URL is: http://localhost:" + ourPort + HapiProperties.getServerBase()); ourLog.info("Base URL is: " + HapiProperties.getServerAddress());
String methodName = "testCreateResourceConditional"; String methodName = "testCreateResourceConditional";
Patient pt = new Patient(); Patient pt = new Patient();
@@ -62,13 +59,10 @@ public class ExampleServerDstu2IT {
ourLog.info("Project base path is: {}", path); ourLog.info("Project base path is: {}", path);
if (ourPort == 0) {
ourPort = RandomServerPortProvider.findFreePort();
}
ourServer = new Server(ourPort); ourServer = new Server(ourPort);
WebAppContext webAppContext = new WebAppContext(); WebAppContext webAppContext = new WebAppContext();
webAppContext.setContextPath("/"); webAppContext.setContextPath("/hapi-fhir-jpaserver");
webAppContext.setDescriptor(path + "/src/main/webapp/WEB-INF/web.xml"); webAppContext.setDescriptor(path + "/src/main/webapp/WEB-INF/web.xml");
webAppContext.setResourceBase(path + "/target/hapi-fhir-jpaserver-starter"); webAppContext.setResourceBase(path + "/target/hapi-fhir-jpaserver-starter");
webAppContext.setParentLoaderPriority(true); webAppContext.setParentLoaderPriority(true);
@@ -78,7 +72,7 @@ public class ExampleServerDstu2IT {
ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER); ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);
ourCtx.getRestfulClientFactory().setSocketTimeout(1200 * 1000); ourCtx.getRestfulClientFactory().setSocketTimeout(1200 * 1000);
ourServerBase = "http://localhost:" + ourPort + HapiProperties.getServerBase(); ourServerBase = "http://localhost:" + ourPort + "/hapi-fhir-jpaserver/fhir/";
ourClient = ourCtx.newRestfulGenericClient(ourServerBase); ourClient = ourCtx.newRestfulGenericClient(ourServerBase);
ourClient.registerInterceptor(new LoggingInterceptor(true)); ourClient.registerInterceptor(new LoggingInterceptor(true));
} }

View File

@@ -44,15 +44,14 @@ public class ExampleServerDstu3IT {
HapiProperties.forceReload(); HapiProperties.forceReload();
HapiProperties.setProperty(HapiProperties.FHIR_VERSION, "DSTU3"); HapiProperties.setProperty(HapiProperties.FHIR_VERSION, "DSTU3");
HapiProperties.setProperty(HapiProperties.DATASOURCE_URL, "jdbc:derby:memory:dbr3;create=true"); HapiProperties.setProperty(HapiProperties.DATASOURCE_URL, "jdbc:derby:memory:dbr3;create=true");
HapiProperties.setProperty(HapiProperties.TEST_PORT, Integer.toString(PortUtil.findFreePort()));
HapiProperties.setProperty(HapiProperties.SUBSCRIPTION_WEBSOCKET_ENABLED, "true"); HapiProperties.setProperty(HapiProperties.SUBSCRIPTION_WEBSOCKET_ENABLED, "true");
ourCtx = FhirContext.forDstu3(); ourCtx = FhirContext.forDstu3();
ourPort = HapiProperties.getTestPort(); ourPort = PortUtil.findFreePort();
} }
@Test @Test
public void testCreateAndRead() throws IOException { public void testCreateAndRead() {
ourLog.info("Base URL is: http://localhost:" + ourPort + HapiProperties.getServerBase()); ourLog.info("Base URL is: " + HapiProperties.getServerAddress());
String methodName = "testCreateResourceConditional"; String methodName = "testCreateResourceConditional";
Patient pt = new Patient(); Patient pt = new Patient();
@@ -92,7 +91,7 @@ public class ExampleServerDstu3IT {
SocketImplementation mySocketImplementation = new SocketImplementation(mySubscriptionId.getIdPart(), EncodingEnum.JSON); SocketImplementation mySocketImplementation = new SocketImplementation(mySubscriptionId.getIdPart(), EncodingEnum.JSON);
myWebSocketClient.start(); myWebSocketClient.start();
URI echoUri = new URI("ws://localhost:" + ourPort + "/websocket"); URI echoUri = new URI("ws://localhost:" + ourPort + "/hapi-fhir-jpaserver/websocket");
ClientUpgradeRequest request = new ClientUpgradeRequest(); ClientUpgradeRequest request = new ClientUpgradeRequest();
ourLog.info("Connecting to : {}", echoUri); ourLog.info("Connecting to : {}", echoUri);
Future<Session> connection = myWebSocketClient.connect(mySocketImplementation, echoUri, request); Future<Session> connection = myWebSocketClient.connect(mySocketImplementation, echoUri, request);
@@ -138,7 +137,7 @@ public class ExampleServerDstu3IT {
ourServer = new Server(ourPort); ourServer = new Server(ourPort);
WebAppContext webAppContext = new WebAppContext(); WebAppContext webAppContext = new WebAppContext();
webAppContext.setContextPath("/"); webAppContext.setContextPath("/hapi-fhir-jpaserver");
webAppContext.setDescriptor(path + "/src/main/webapp/WEB-INF/web.xml"); webAppContext.setDescriptor(path + "/src/main/webapp/WEB-INF/web.xml");
webAppContext.setResourceBase(path + "/target/hapi-fhir-jpaserver-starter"); webAppContext.setResourceBase(path + "/target/hapi-fhir-jpaserver-starter");
webAppContext.setParentLoaderPriority(true); webAppContext.setParentLoaderPriority(true);
@@ -148,7 +147,7 @@ public class ExampleServerDstu3IT {
ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER); ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);
ourCtx.getRestfulClientFactory().setSocketTimeout(1200 * 1000); ourCtx.getRestfulClientFactory().setSocketTimeout(1200 * 1000);
ourServerBase = "http://localhost:" + ourPort + HapiProperties.getServerBase(); ourServerBase = "http://localhost:" + ourPort + "/hapi-fhir-jpaserver/fhir/";
ourClient = ourCtx.newRestfulGenericClient(ourServerBase); ourClient = ourCtx.newRestfulGenericClient(ourServerBase);
ourClient.registerInterceptor(new LoggingInterceptor(true)); ourClient.registerInterceptor(new LoggingInterceptor(true));
} }

View File

@@ -45,15 +45,14 @@ public class ExampleServerR4IT {
HapiProperties.forceReload(); HapiProperties.forceReload();
HapiProperties.setProperty(HapiProperties.DATASOURCE_URL, "jdbc:derby:memory:dbr4;create=true"); HapiProperties.setProperty(HapiProperties.DATASOURCE_URL, "jdbc:derby:memory:dbr4;create=true");
HapiProperties.setProperty(HapiProperties.FHIR_VERSION, "R4"); HapiProperties.setProperty(HapiProperties.FHIR_VERSION, "R4");
HapiProperties.setProperty(HapiProperties.TEST_PORT, Integer.toString(PortUtil.findFreePort()));
HapiProperties.setProperty(HapiProperties.SUBSCRIPTION_WEBSOCKET_ENABLED, "true"); HapiProperties.setProperty(HapiProperties.SUBSCRIPTION_WEBSOCKET_ENABLED, "true");
ourCtx = FhirContext.forR4(); ourCtx = FhirContext.forR4();
ourPort = HapiProperties.getTestPort(); ourPort = PortUtil.findFreePort();
} }
@Test @Test
public void testCreateAndRead() throws IOException { public void testCreateAndRead() {
ourLog.info("Base URL is: http://localhost:" + ourPort + HapiProperties.getServerBase()); ourLog.info("Base URL is: " + HapiProperties.getServerAddress());
String methodName = "testCreateResourceConditional"; String methodName = "testCreateResourceConditional";
Patient pt = new Patient(); Patient pt = new Patient();
@@ -93,7 +92,7 @@ public class ExampleServerR4IT {
SocketImplementation mySocketImplementation = new SocketImplementation(mySubscriptionId.getIdPart(), EncodingEnum.JSON); SocketImplementation mySocketImplementation = new SocketImplementation(mySubscriptionId.getIdPart(), EncodingEnum.JSON);
myWebSocketClient.start(); myWebSocketClient.start();
URI echoUri = new URI("ws://localhost:" + ourPort + "/websocket"); URI echoUri = new URI("ws://localhost:" + ourPort + "/hapi-fhir-jpaserver/websocket");
ClientUpgradeRequest request = new ClientUpgradeRequest(); ClientUpgradeRequest request = new ClientUpgradeRequest();
ourLog.info("Connecting to : {}", echoUri); ourLog.info("Connecting to : {}", echoUri);
Future<Session> connection = myWebSocketClient.connect(mySocketImplementation, echoUri, request); Future<Session> connection = myWebSocketClient.connect(mySocketImplementation, echoUri, request);
@@ -139,7 +138,7 @@ public class ExampleServerR4IT {
ourServer = new Server(ourPort); ourServer = new Server(ourPort);
WebAppContext webAppContext = new WebAppContext(); WebAppContext webAppContext = new WebAppContext();
webAppContext.setContextPath("/"); webAppContext.setContextPath("/hapi-fhir-jpaserver");
webAppContext.setDisplayName("HAPI FHIR"); webAppContext.setDisplayName("HAPI FHIR");
webAppContext.setDescriptor(path + "/src/main/webapp/WEB-INF/web.xml"); webAppContext.setDescriptor(path + "/src/main/webapp/WEB-INF/web.xml");
webAppContext.setResourceBase(path + "/target/hapi-fhir-jpaserver-starter"); webAppContext.setResourceBase(path + "/target/hapi-fhir-jpaserver-starter");
@@ -150,8 +149,8 @@ public class ExampleServerR4IT {
ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER); ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);
ourCtx.getRestfulClientFactory().setSocketTimeout(1200 * 1000); ourCtx.getRestfulClientFactory().setSocketTimeout(1200 * 1000);
ourServerBase = "http://localhost:" + ourPort + HapiProperties.getServerBase(); ourServerBase = HapiProperties.getServerAddress();
ourClient = ourCtx.newRestfulGenericClient(ourServerBase); ourServerBase = "http://localhost:" + ourPort + "/hapi-fhir-jpaserver/fhir/";
ourClient.registerInterceptor(new LoggingInterceptor(true)); ourClient.registerInterceptor(new LoggingInterceptor(true));
} }