diff --git a/pom.xml b/pom.xml index 8199669ccc7..fdd677c6a77 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ ca.uhn.hapi.fhir hapi-fhir - 7.2.1 + 7.4.0 hapi-fhir-jpaserver-starter diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/common/FhirServerConfigCommon.java b/src/main/java/ca/uhn/fhir/jpa/starter/common/FhirServerConfigCommon.java index 0f15abff8e7..a312360723c 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/common/FhirServerConfigCommon.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/common/FhirServerConfigCommon.java @@ -6,6 +6,7 @@ import ca.uhn.fhir.jpa.config.HibernatePropertiesProvider; import ca.uhn.fhir.jpa.model.config.PartitionSettings; import ca.uhn.fhir.jpa.model.config.PartitionSettings.CrossPartitionReferenceMode; +import ca.uhn.fhir.jpa.model.config.SubscriptionSettings; import ca.uhn.fhir.jpa.model.entity.StorageSettings; import ca.uhn.fhir.jpa.starter.AppProperties; import ca.uhn.fhir.jpa.starter.util.JpaHibernatePropertiesProvider; @@ -87,6 +88,40 @@ public FhirServerConfigCommon(AppProperties appProperties) { } } + @Bean + public SubscriptionSettings subscriptionSettings(AppProperties appProperties) { + SubscriptionSettings subscriptionSettings = new SubscriptionSettings(); + if (appProperties.getSubscription() != null) { + if (appProperties.getSubscription().getEmail() != null) + subscriptionSettings.setEmailFromAddress( + appProperties.getSubscription().getEmail().getFrom()); + + // Subscriptions are enabled by channel type + if (appProperties.getSubscription().getResthook_enabled()) { + ourLog.info("Enabling REST-hook subscriptions"); + subscriptionSettings.addSupportedSubscriptionType( + org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.RESTHOOK); + } + if (appProperties.getSubscription().getEmail() != null) { + ourLog.info("Enabling email subscriptions"); + subscriptionSettings.addSupportedSubscriptionType( + org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.EMAIL); + } + if (appProperties.getSubscription().getWebsocket_enabled()) { + ourLog.info("Enabling websocket subscriptions"); + subscriptionSettings.addSupportedSubscriptionType( + org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.WEBSOCKET); + } + + } + if (appProperties.getMdm_enabled()) { + // MDM requires the subscription of type message + ourLog.info("Enabling message subscriptions"); + subscriptionSettings.addSupportedSubscriptionType( + org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.MESSAGE); + } + return subscriptionSettings; + } /** * Configure FHIR properties around the JPA server via this bean */ @@ -114,10 +149,7 @@ public JpaStorageSettings jpaStorageSettings(AppProperties appProperties) { jpaStorageSettings.setDeleteExpungeEnabled(appProperties.getDelete_expunge_enabled()); jpaStorageSettings.setExpungeEnabled(appProperties.getExpunge_enabled()); jpaStorageSettings.setLanguageSearchParameterEnabled(appProperties.getLanguage_search_parameter_enabled()); - if (appProperties.getSubscription() != null - && appProperties.getSubscription().getEmail() != null) - jpaStorageSettings.setEmailFromAddress( - appProperties.getSubscription().getEmail().getFrom()); + Integer maxFetchSize = appProperties.getMax_page_size(); jpaStorageSettings.setFetchSizeDefaultMaximum(maxFetchSize); @@ -131,24 +163,7 @@ public JpaStorageSettings jpaStorageSettings(AppProperties appProperties) { Long retainCachedSearchesMinutes = appProperties.getRetain_cached_searches_mins(); jpaStorageSettings.setExpireSearchResultsAfterMillis(retainCachedSearchesMinutes * 60 * 1000); - if (appProperties.getSubscription() != null) { - // Subscriptions are enabled by channel type - if (appProperties.getSubscription().getResthook_enabled()) { - ourLog.info("Enabling REST-hook subscriptions"); - jpaStorageSettings.addSupportedSubscriptionType( - org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.RESTHOOK); - } - if (appProperties.getSubscription().getEmail() != null) { - ourLog.info("Enabling email subscriptions"); - jpaStorageSettings.addSupportedSubscriptionType( - org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.EMAIL); - } - if (appProperties.getSubscription().getWebsocket_enabled()) { - ourLog.info("Enabling websocket subscriptions"); - jpaStorageSettings.addSupportedSubscriptionType( - org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.WEBSOCKET); - } - } + jpaStorageSettings.setFilterParameterEnabled(appProperties.getFilter_search_enabled()); jpaStorageSettings.setAdvancedHSearchIndexing(appProperties.getAdvanced_lucene_indexing()); @@ -204,13 +219,6 @@ public JpaStorageSettings jpaStorageSettings(AppProperties appProperties) { jpaStorageSettings.setBundleBatchPoolSize(appProperties.getBundle_batch_pool_size()); jpaStorageSettings.setBundleBatchPoolSize(appProperties.getBundle_batch_pool_max_size()); - if (appProperties.getMdm_enabled()) { - // MDM requires the subscription of type message - ourLog.info("Enabling message subscriptions"); - jpaStorageSettings.addSupportedSubscriptionType( - org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.MESSAGE); - } - storageSettings(appProperties, jpaStorageSettings); return jpaStorageSettings; } @@ -251,10 +259,6 @@ protected StorageSettings storageSettings(AppProperties appProperties, JpaStorag jpaStorageSettings.setAllowExternalReferences(appProperties.getAllow_external_references()); jpaStorageSettings.setDefaultSearchParamsCanBeOverridden( appProperties.getAllow_override_default_search_params()); - if (appProperties.getSubscription() != null - && appProperties.getSubscription().getEmail() != null) - jpaStorageSettings.setEmailFromAddress( - appProperties.getSubscription().getEmail().getFrom()); jpaStorageSettings.setNormalizedQuantitySearchLevel(appProperties.getNormalized_quantity_search_level()); diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/common/StarterJpaConfig.java b/src/main/java/ca/uhn/fhir/jpa/starter/common/StarterJpaConfig.java index 6ff4c5e1262..31662888f76 100644 --- a/src/main/java/ca/uhn/fhir/jpa/starter/common/StarterJpaConfig.java +++ b/src/main/java/ca/uhn/fhir/jpa/starter/common/StarterJpaConfig.java @@ -30,6 +30,7 @@ import ca.uhn.fhir.jpa.interceptor.CascadingDeleteInterceptor; import ca.uhn.fhir.jpa.interceptor.validation.RepositoryValidatingInterceptor; import ca.uhn.fhir.jpa.ips.provider.IpsOperationProvider; +import ca.uhn.fhir.jpa.model.config.SubscriptionSettings; import ca.uhn.fhir.jpa.packages.IPackageInstallerSvc; import ca.uhn.fhir.jpa.packages.PackageInstallationSpec; import ca.uhn.fhir.jpa.partition.PartitionManagementProvider; @@ -252,6 +253,7 @@ public RestfulServer restfulServer( IJpaSystemProvider jpaSystemProvider, ResourceProviderFactory resourceProviderFactory, JpaStorageSettings jpaStorageSettings, + SubscriptionSettings subscriptionSettings, ISearchParamRegistry searchParamRegistry, IValidationSupport theValidationSupport, DatabaseBackedPagingProvider databaseBackedPagingProvider, @@ -378,7 +380,7 @@ public RestfulServer restfulServer( corsInterceptor.ifPresent(fhirServer::registerInterceptor); - if (jpaStorageSettings.getSupportedSubscriptionTypes().size() > 0) { + if (!subscriptionSettings.getSupportedSubscriptionTypes().isEmpty()) { // Subscription debug logging fhirServer.registerInterceptor(new SubscriptionDebugLogInterceptor()); } diff --git a/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerDstu3IT.java b/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerDstu3IT.java index 3d706b6a392..32fabbce76c 100644 --- a/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerDstu3IT.java +++ b/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerDstu3IT.java @@ -43,7 +43,6 @@ RepositoryConfig.class }, properties = { - "spring.profiles.include=storageSettingsTest", "spring.datasource.url=jdbc:h2:mem:dbr3", "hapi.fhir.fhir_version=dstu3", "hapi.fhir.cr_enabled=true", diff --git a/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR4IT.java b/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR4IT.java index 59e06b82190..d7b46315dbd 100644 --- a/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR4IT.java +++ b/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR4IT.java @@ -55,11 +55,10 @@ NicknameServiceConfig.class, RepositoryConfig.class }, properties = { - "spring.profiles.include=storageSettingsTest", "spring.datasource.url=jdbc:h2:mem:dbr4", "hapi.fhir.enable_repository_validating_interceptor=true", "hapi.fhir.fhir_version=r4", - //"hapi.fhir.subscription.websocket_enabled=true", + "hapi.fhir.subscription.websocket_enabled=true", //"hapi.fhir.mdm_enabled=true", "hapi.fhir.cr.enabled=true", "hapi.fhir.cr.caregaps.section_author=Organization/alphora-author", @@ -230,7 +229,7 @@ void testWebsocketSubscription() throws Exception { IIdType mySubscriptionId = methodOutcome.getId(); // Wait for the subscription to be activated - await().atMost(1, TimeUnit.MINUTES).until(()->activeSubscriptionCount(), equalTo(initialActiveSubscriptionCount + 1)); + await().atMost(1, TimeUnit.MINUTES).until(this::activeSubscriptionCount, equalTo(initialActiveSubscriptionCount + 1)); /* * Attach websocket diff --git a/src/test/java/ca/uhn/fhir/jpa/starter/JpaStorageSettingsConfig.java b/src/test/java/ca/uhn/fhir/jpa/starter/JpaStorageSettingsConfig.java deleted file mode 100644 index 8ed4bce0cbd..00000000000 --- a/src/test/java/ca/uhn/fhir/jpa/starter/JpaStorageSettingsConfig.java +++ /dev/null @@ -1,22 +0,0 @@ -package ca.uhn.fhir.jpa.starter; - -import ca.uhn.fhir.jpa.api.config.JpaStorageSettings; -import org.hl7.fhir.dstu2.model.Subscription; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; -import org.springframework.context.annotation.Profile; - -@Profile("storageSettingsTest") -@Configuration -public class JpaStorageSettingsConfig { - @Primary - @Bean - public JpaStorageSettings storageSettings() { - JpaStorageSettings retVal = new JpaStorageSettings(); - - retVal.addSupportedSubscriptionType(Subscription.SubscriptionChannelType.WEBSOCKET); - retVal.addSupportedSubscriptionType(Subscription.SubscriptionChannelType.MESSAGE); - return retVal; - } -} diff --git a/src/test/java/ca/uhn/fhir/jpa/starter/MdmTest.java b/src/test/java/ca/uhn/fhir/jpa/starter/MdmTest.java index 4fc080195be..bd1f58db633 100644 --- a/src/test/java/ca/uhn/fhir/jpa/starter/MdmTest.java +++ b/src/test/java/ca/uhn/fhir/jpa/starter/MdmTest.java @@ -2,6 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; +import ca.uhn.fhir.jpa.model.config.SubscriptionSettings; import org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -21,9 +22,12 @@ class MdmTest { @Autowired JpaStorageSettings jpaStorageSettings; + @Autowired + SubscriptionSettings subscriptionSettings; + @Test void testApplicationStartedSuccessfully() { assertThat(nicknameService).isNotNull(); - assertThat(jpaStorageSettings.getSupportedSubscriptionTypes()).contains(SubscriptionChannelType.MESSAGE); + assertThat(subscriptionSettings.getSupportedSubscriptionTypes()).contains(SubscriptionChannelType.MESSAGE); } } diff --git a/src/test/smoketest/plain_server.http b/src/test/smoketest/plain_server.http index ff159a46a17..572a48f4e1c 100644 --- a/src/test/smoketest/plain_server.http +++ b/src/test/smoketest/plain_server.http @@ -87,7 +87,7 @@ Content-Type: application/json }); const batch_patient_location = response.body.entry[0].response.location; const indexOfHistory = batch_patient_location.lastIndexOf("/_history"); - trimmed_location = batch_patient_location.substring(0, indexOfHistory); + var trimmed_location = batch_patient_location.substring(0, indexOfHistory); trimmed_location = trimmed_location.replace("Patient/", "") client.global.set("batch_patient_id", trimmed_location); %}