diff --git a/pom.xml b/pom.xml
index 6a5138f..1fc9a25 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
ca.uhn.hapi.fhir
hapi-fhir
- 6.4.4
+ 6.6.0
hapi-fhir-jpaserver-starter
@@ -62,7 +62,17 @@
com.microsoft.sqlserver
mssql-jdbc
-
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+ 2.3.3
+
+
+ com.sun.xml.bind
+ jaxb-ri
+ 2.3.5
+ pom
+
org.simplejavamail
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java b/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java
index 271ab63..b48d4e1 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java
@@ -2,7 +2,7 @@ package ca.uhn.fhir.jpa.starter;
import ca.uhn.fhir.context.FhirVersionEnum;
-import ca.uhn.fhir.jpa.api.config.DaoConfig.ClientIdStrategyEnum;
+import ca.uhn.fhir.jpa.api.config.JpaStorageSettings.ClientIdStrategyEnum;
import ca.uhn.fhir.jpa.model.entity.NormalizedQuantitySearchLevel;
import ca.uhn.fhir.rest.api.EncodingEnum;
import com.google.common.collect.ImmutableList;
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 1607c87..9751ba7 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
@@ -1,12 +1,12 @@
package ca.uhn.fhir.jpa.starter.common;
-import ca.uhn.fhir.jpa.api.config.DaoConfig;
+import ca.uhn.fhir.jpa.api.config.JpaStorageSettings;
import ca.uhn.fhir.jpa.binary.api.IBinaryStorageSvc;
import ca.uhn.fhir.jpa.binstore.DatabaseBlobBinaryStorageSvcImpl;
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.entity.ModelConfig;
+import ca.uhn.fhir.jpa.model.entity.StorageSettings;
import ca.uhn.fhir.jpa.starter.AppProperties;
import ca.uhn.fhir.jpa.starter.util.JpaHibernatePropertiesProvider;
import ca.uhn.fhir.jpa.subscription.channel.subscription.SubscriptionDeliveryHandlerFactory;
@@ -17,7 +17,7 @@ import ca.uhn.fhir.rest.server.mail.MailConfig;
import ca.uhn.fhir.rest.server.mail.MailSvc;
import com.google.common.base.Strings;
import org.hl7.fhir.r4.model.Bundle.BundleType;
-import org.hl7.fhir.dstu2.model.Subscription;
+
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -81,84 +81,85 @@ public class FhirServerConfigCommon {
* Configure FHIR properties around the the JPA server via this bean
*/
@Bean
- public DaoConfig daoConfig(AppProperties appProperties) {
- DaoConfig daoConfig = new DaoConfig();
+ public JpaStorageSettings jpaStorageSettings(AppProperties appProperties) {
+ JpaStorageSettings jpaStorageSettings = new JpaStorageSettings();
- daoConfig.setIndexMissingFields(appProperties.getEnable_index_missing_fields() ? DaoConfig.IndexEnabledEnum.ENABLED : DaoConfig.IndexEnabledEnum.DISABLED);
- daoConfig.setAutoCreatePlaceholderReferenceTargets(appProperties.getAuto_create_placeholder_reference_targets());
- daoConfig.setEnforceReferentialIntegrityOnWrite(appProperties.getEnforce_referential_integrity_on_write());
- daoConfig.setEnforceReferentialIntegrityOnDelete(appProperties.getEnforce_referential_integrity_on_delete());
- daoConfig.setAllowContainsSearches(appProperties.getAllow_contains_searches());
- daoConfig.setAllowMultipleDelete(appProperties.getAllow_multiple_delete());
- daoConfig.setAllowExternalReferences(appProperties.getAllow_external_references());
- daoConfig.setSchedulingDisabled(!appProperties.getDao_scheduling_enabled());
- daoConfig.setDeleteExpungeEnabled(appProperties.getDelete_expunge_enabled());
- daoConfig.setExpungeEnabled(appProperties.getExpunge_enabled());
+ jpaStorageSettings.setIndexMissingFields(appProperties.getEnable_index_missing_fields() ? JpaStorageSettings.IndexEnabledEnum.ENABLED : JpaStorageSettings.IndexEnabledEnum.DISABLED);
+ jpaStorageSettings.setAutoCreatePlaceholderReferenceTargets(appProperties.getAuto_create_placeholder_reference_targets());
+ jpaStorageSettings.setEnforceReferentialIntegrityOnWrite(appProperties.getEnforce_referential_integrity_on_write());
+ jpaStorageSettings.setEnforceReferentialIntegrityOnDelete(appProperties.getEnforce_referential_integrity_on_delete());
+ jpaStorageSettings.setAllowContainsSearches(appProperties.getAllow_contains_searches());
+ jpaStorageSettings.setAllowMultipleDelete(appProperties.getAllow_multiple_delete());
+ jpaStorageSettings.setAllowExternalReferences(appProperties.getAllow_external_references());
+ jpaStorageSettings.setSchedulingDisabled(!appProperties.getDao_scheduling_enabled());
+ jpaStorageSettings.setDeleteExpungeEnabled(appProperties.getDelete_expunge_enabled());
+ jpaStorageSettings.setExpungeEnabled(appProperties.getExpunge_enabled());
if(appProperties.getSubscription() != null && appProperties.getSubscription().getEmail() != null)
- daoConfig.setEmailFromAddress(appProperties.getSubscription().getEmail().getFrom());
+ jpaStorageSettings.setEmailFromAddress(appProperties.getSubscription().getEmail().getFrom());
Integer maxFetchSize = appProperties.getMax_page_size();
- daoConfig.setFetchSizeDefaultMaximum(maxFetchSize);
+ jpaStorageSettings.setFetchSizeDefaultMaximum(maxFetchSize);
ourLog.info("Server configured to have a maximum fetch size of " + (maxFetchSize == Integer.MAX_VALUE ? "'unlimited'" : maxFetchSize));
Long reuseCachedSearchResultsMillis = appProperties.getReuse_cached_search_results_millis();
- daoConfig.setReuseCachedSearchResultsForMillis(reuseCachedSearchResultsMillis);
+ jpaStorageSettings.setReuseCachedSearchResultsForMillis(reuseCachedSearchResultsMillis);
ourLog.info("Server configured to cache search results for {} milliseconds", reuseCachedSearchResultsMillis);
Long retainCachedSearchesMinutes = appProperties.getRetain_cached_searches_mins();
- daoConfig.setExpireSearchResultsAfterMillis(retainCachedSearchesMinutes * 60 * 1000);
+ 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");
- daoConfig.addSupportedSubscriptionType(org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.RESTHOOK);
+ jpaStorageSettings.addSupportedSubscriptionType(org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.RESTHOOK);
}
if (appProperties.getSubscription().getEmail() != null) {
ourLog.info("Enabling email subscriptions");
- daoConfig.addSupportedSubscriptionType(org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.EMAIL);
+ jpaStorageSettings.addSupportedSubscriptionType(org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.EMAIL);
}
if (appProperties.getSubscription().getWebsocket_enabled()) {
ourLog.info("Enabling websocket subscriptions");
- daoConfig.addSupportedSubscriptionType(org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.WEBSOCKET);
+ jpaStorageSettings.addSupportedSubscriptionType(org.hl7.fhir.dstu2.model.Subscription.SubscriptionChannelType.WEBSOCKET);
}
}
- daoConfig.setFilterParameterEnabled(appProperties.getFilter_search_enabled());
- daoConfig.setAdvancedHSearchIndexing(appProperties.getAdvanced_lucene_indexing());
- daoConfig.setTreatBaseUrlsAsLocal(new HashSet<>(appProperties.getLocal_base_urls()));
+ jpaStorageSettings.setFilterParameterEnabled(appProperties.getFilter_search_enabled());
+ jpaStorageSettings.setAdvancedHSearchIndexing(appProperties.getAdvanced_lucene_indexing());
+ jpaStorageSettings.setTreatBaseUrlsAsLocal(new HashSet<>(appProperties.getLocal_base_urls()));
if (appProperties.getLastn_enabled()) {
- daoConfig.setLastNEnabled(true);
+ jpaStorageSettings.setLastNEnabled(true);
}
if(appProperties.getInline_resource_storage_below_size() != 0){
- daoConfig.setInlineResourceTextBelowSize(appProperties.getInline_resource_storage_below_size());
+ jpaStorageSettings.setInlineResourceTextBelowSize(appProperties.getInline_resource_storage_below_size());
}
- daoConfig.setStoreResourceInHSearchIndex(appProperties.getStore_resource_in_lucene_index_enabled());
- daoConfig.getModelConfig().setNormalizedQuantitySearchLevel(appProperties.getNormalized_quantity_search_level());
- daoConfig.getModelConfig().setIndexOnContainedResources(appProperties.getEnable_index_contained_resource());
+ jpaStorageSettings.setStoreResourceInHSearchIndex(appProperties.getStore_resource_in_lucene_index_enabled());
+ jpaStorageSettings.setNormalizedQuantitySearchLevel(appProperties.getNormalized_quantity_search_level());
+ jpaStorageSettings.setIndexOnContainedResources(appProperties.getEnable_index_contained_resource());
if (appProperties.getAllowed_bundle_types() != null) {
- daoConfig.setBundleTypesAllowedForStorage(appProperties.getAllowed_bundle_types().stream().map(BundleType::toCode).collect(Collectors.toSet()));
+ jpaStorageSettings.setBundleTypesAllowedForStorage(appProperties.getAllowed_bundle_types().stream().map(BundleType::toCode).collect(Collectors.toSet()));
}
- daoConfig.setDeferIndexingForCodesystemsOfSize(appProperties.getDefer_indexing_for_codesystems_of_size());
+ jpaStorageSettings.setDeferIndexingForCodesystemsOfSize(appProperties.getDefer_indexing_for_codesystems_of_size());
- if (appProperties.getClient_id_strategy() == DaoConfig.ClientIdStrategyEnum.ANY) {
- daoConfig.setResourceServerIdStrategy(DaoConfig.IdStrategyEnum.UUID);
- daoConfig.setResourceClientIdStrategy(appProperties.getClient_id_strategy());
+ if (appProperties.getClient_id_strategy() == JpaStorageSettings.ClientIdStrategyEnum.ANY) {
+ jpaStorageSettings.setResourceServerIdStrategy(JpaStorageSettings.IdStrategyEnum.UUID);
+ jpaStorageSettings.setResourceClientIdStrategy(appProperties.getClient_id_strategy());
}
//Parallel Batch GET execution settings
- daoConfig.setBundleBatchPoolSize(appProperties.getBundle_batch_pool_size());
- daoConfig.setBundleBatchMaxPoolSize(appProperties.getBundle_batch_pool_max_size());
+ jpaStorageSettings.setBundleBatchPoolSize(appProperties.getBundle_batch_pool_size());
+ jpaStorageSettings.setBundleBatchPoolSize(appProperties.getBundle_batch_pool_max_size());
- return daoConfig;
+ storageSettings(appProperties, jpaStorageSettings);
+ return jpaStorageSettings;
}
@Bean
@@ -191,20 +192,19 @@ public class FhirServerConfigCommon {
return new JpaHibernatePropertiesProvider(myEntityManagerFactory);
}
- @Bean
- public ModelConfig modelConfig(AppProperties appProperties, DaoConfig daoConfig) {
- ModelConfig modelConfig = daoConfig.getModelConfig();
- modelConfig.setAllowContainsSearches(appProperties.getAllow_contains_searches());
- modelConfig.setAllowExternalReferences(appProperties.getAllow_external_references());
- modelConfig.setDefaultSearchParamsCanBeOverridden(appProperties.getAllow_override_default_search_params());
+
+ protected StorageSettings storageSettings(AppProperties appProperties, JpaStorageSettings jpaStorageSettings) {
+ jpaStorageSettings.setAllowContainsSearches(appProperties.getAllow_contains_searches());
+ jpaStorageSettings.setAllowExternalReferences(appProperties.getAllow_external_references());
+ jpaStorageSettings.setDefaultSearchParamsCanBeOverridden(appProperties.getAllow_override_default_search_params());
if(appProperties.getSubscription() != null && appProperties.getSubscription().getEmail() != null)
- modelConfig.setEmailFromAddress(appProperties.getSubscription().getEmail().getFrom());
+ jpaStorageSettings.setEmailFromAddress(appProperties.getSubscription().getEmail().getFrom());
- modelConfig.setNormalizedQuantitySearchLevel(appProperties.getNormalized_quantity_search_level());
+ jpaStorageSettings.setNormalizedQuantitySearchLevel(appProperties.getNormalized_quantity_search_level());
- modelConfig.setIndexOnContainedResources(appProperties.getEnable_index_contained_resource());
- modelConfig.setIndexIdentifierOfType(appProperties.getEnable_index_of_type());
- return modelConfig;
+ jpaStorageSettings.setIndexOnContainedResources(appProperties.getEnable_index_contained_resource());
+ jpaStorageSettings.setIndexIdentifierOfType(appProperties.getEnable_index_of_type());
+ return jpaStorageSettings;
}
@Lazy
@@ -220,25 +220,23 @@ public class FhirServerConfigCommon {
}
@Bean
- public IEmailSender emailSender(AppProperties appProperties, Optional subscriptionDeliveryHandlerFactory) {
- if (appProperties.getSubscription() != null && appProperties.getSubscription().getEmail() != null) {
- MailConfig mailConfig = new MailConfig();
+ public IEmailSender emailSender(AppProperties appProperties) {
+ if (appProperties.getSubscription() != null && appProperties.getSubscription().getEmail() != null) {
+ MailConfig mailConfig = new MailConfig();
- AppProperties.Subscription.Email email = appProperties.getSubscription().getEmail();
- mailConfig.setSmtpHostname(email.getHost());
- mailConfig.setSmtpPort(email.getPort());
- mailConfig.setSmtpUsername(email.getUsername());
- mailConfig.setSmtpPassword(email.getPassword());
- mailConfig.setSmtpUseStartTLS(email.getStartTlsEnable());
+ AppProperties.Subscription.Email email = appProperties.getSubscription().getEmail();
+ mailConfig.setSmtpHostname(email.getHost());
+ mailConfig.setSmtpPort(email.getPort());
+ mailConfig.setSmtpUsername(email.getUsername());
+ mailConfig.setSmtpPassword(email.getPassword());
+ mailConfig.setSmtpUseStartTLS(email.getStartTlsEnable());
- IMailSvc mailSvc = new MailSvc(mailConfig);
- IEmailSender emailSender = new EmailSenderImpl(mailSvc);
+ IMailSvc mailSvc = new MailSvc(mailConfig);
+ IEmailSender emailSender = new EmailSenderImpl(mailSvc);
- subscriptionDeliveryHandlerFactory.ifPresent(theSubscriptionDeliveryHandlerFactory -> theSubscriptionDeliveryHandlerFactory.setEmailSender(emailSender));
+ return emailSender;
+ }
- return emailSender;
- }
-
- return null;
+ return null;
}
}
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/common/FhirServerConfigR4B.java b/src/main/java/ca/uhn/fhir/jpa/starter/common/FhirServerConfigR4B.java
index d99d102..4272017 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/common/FhirServerConfigR4B.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/common/FhirServerConfigR4B.java
@@ -2,6 +2,7 @@ package ca.uhn.fhir.jpa.starter.common;
import ca.uhn.fhir.jpa.config.r4b.JpaR4BConfig;
import ca.uhn.fhir.jpa.starter.annotations.OnR4BCondition;
+import ca.uhn.fhir.jpa.topic.SubscriptionTopicConfig;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@@ -10,6 +11,7 @@ import org.springframework.context.annotation.Import;
@Conditional(OnR4BCondition.class)
@Import({
JpaR4BConfig.class,
+ SubscriptionTopicConfig.class,
StarterJpaConfig.class,
ElasticsearchConfig.class
})
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/common/FhirServerConfigR5.java b/src/main/java/ca/uhn/fhir/jpa/starter/common/FhirServerConfigR5.java
index 1552aef..5e2e430 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/common/FhirServerConfigR5.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/common/FhirServerConfigR5.java
@@ -2,6 +2,7 @@ package ca.uhn.fhir.jpa.starter.common;
import ca.uhn.fhir.jpa.config.r5.JpaR5Config;
import ca.uhn.fhir.jpa.starter.annotations.OnR5Condition;
+import ca.uhn.fhir.jpa.topic.SubscriptionTopicConfig;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@@ -11,6 +12,7 @@ import org.springframework.context.annotation.Import;
@Import({
StarterJpaConfig.class,
JpaR5Config.class,
+ SubscriptionTopicConfig.class,
ElasticsearchConfig.class
})
public class FhirServerConfigR5 {
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 47dce92..a7ac187 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
@@ -11,7 +11,7 @@ import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.context.support.IValidationSupport;
import ca.uhn.fhir.interceptor.api.IInterceptorBroadcaster;
import ca.uhn.fhir.jpa.api.IDaoRegistry;
-import ca.uhn.fhir.jpa.api.config.DaoConfig;
+import ca.uhn.fhir.jpa.api.config.JpaStorageSettings;
import ca.uhn.fhir.jpa.api.config.ThreadPoolFactoryConfig;
import ca.uhn.fhir.jpa.api.dao.DaoRegistry;
import ca.uhn.fhir.jpa.api.dao.IFhirSystemDao;
@@ -241,7 +241,7 @@ public class StarterJpaConfig {
}
@Bean
- public RestfulServer restfulServer(IFhirSystemDao, ?> fhirSystemDao, AppProperties appProperties, DaoRegistry daoRegistry, Optional mdmProviderProvider, IJpaSystemProvider jpaSystemProvider, ResourceProviderFactory resourceProviderFactory, DaoConfig daoConfig, ISearchParamRegistry searchParamRegistry, IValidationSupport theValidationSupport, DatabaseBackedPagingProvider databaseBackedPagingProvider, LoggingInterceptor loggingInterceptor, Optional terminologyUploaderProvider, Optional subscriptionTriggeringProvider, Optional corsInterceptor, IInterceptorBroadcaster interceptorBroadcaster, Optional binaryAccessProvider, BinaryStorageInterceptor binaryStorageInterceptor, IValidatorModule validatorModule, Optional graphQLProvider, BulkDataExportProvider bulkDataExportProvider, BulkDataImportProvider bulkDataImportProvider, ValueSetOperationProvider theValueSetOperationProvider, ReindexProvider reindexProvider, PartitionManagementProvider partitionManagementProvider, Optional repositoryValidatingInterceptor, IPackageInstallerSvc packageInstallerSvc, ThreadSafeResourceDeleterSvc theThreadSafeResourceDeleterSvc, ApplicationContext appContext, Optional theIpsOperationProvider) {
+ public RestfulServer restfulServer(IFhirSystemDao, ?> fhirSystemDao, AppProperties appProperties, DaoRegistry daoRegistry, Optional mdmProviderProvider, IJpaSystemProvider jpaSystemProvider, ResourceProviderFactory resourceProviderFactory, JpaStorageSettings jpaStorageSettings, ISearchParamRegistry searchParamRegistry, IValidationSupport theValidationSupport, DatabaseBackedPagingProvider databaseBackedPagingProvider, LoggingInterceptor loggingInterceptor, Optional terminologyUploaderProvider, Optional subscriptionTriggeringProvider, Optional corsInterceptor, IInterceptorBroadcaster interceptorBroadcaster, Optional binaryAccessProvider, BinaryStorageInterceptor binaryStorageInterceptor, IValidatorModule validatorModule, Optional graphQLProvider, BulkDataExportProvider bulkDataExportProvider, BulkDataImportProvider bulkDataImportProvider, ValueSetOperationProvider theValueSetOperationProvider, ReindexProvider reindexProvider, PartitionManagementProvider partitionManagementProvider, Optional repositoryValidatingInterceptor, IPackageInstallerSvc packageInstallerSvc, ThreadSafeResourceDeleterSvc theThreadSafeResourceDeleterSvc, ApplicationContext appContext, Optional theIpsOperationProvider) {
RestfulServer fhirServer = new RestfulServer(fhirSystemDao.getContext());
List supportedResourceTypes = appProperties.getSupported_resource_types();
@@ -263,7 +263,7 @@ public class StarterJpaConfig {
fhirServer.registerProviders(resourceProviderFactory.createProviders());
fhirServer.registerProvider(jpaSystemProvider);
- fhirServer.setServerConformanceProvider(calculateConformanceProvider(fhirSystemDao, fhirServer, daoConfig, searchParamRegistry, theValidationSupport));
+ fhirServer.setServerConformanceProvider(calculateConformanceProvider(fhirSystemDao, fhirServer, jpaStorageSettings, searchParamRegistry, theValidationSupport));
/*
* ETag Support
@@ -339,7 +339,7 @@ public class StarterJpaConfig {
corsInterceptor.ifPresent(fhirServer::registerInterceptor);
- if (daoConfig.getSupportedSubscriptionTypes().size() > 0) {
+ if (jpaStorageSettings.getSupportedSubscriptionTypes().size() > 0) {
// Subscription debug logging
fhirServer.registerInterceptor(new SubscriptionDebugLogInterceptor());
}
@@ -458,30 +458,30 @@ public class StarterJpaConfig {
}
}
- public static IServerConformanceProvider> calculateConformanceProvider(IFhirSystemDao fhirSystemDao, RestfulServer fhirServer, DaoConfig daoConfig, ISearchParamRegistry searchParamRegistry, IValidationSupport theValidationSupport) {
+ public static IServerConformanceProvider> calculateConformanceProvider(IFhirSystemDao fhirSystemDao, RestfulServer fhirServer, JpaStorageSettings jpaStorageSettings, ISearchParamRegistry searchParamRegistry, IValidationSupport theValidationSupport) {
FhirVersionEnum fhirVersion = fhirSystemDao.getContext().getVersion().getVersion();
if (fhirVersion == FhirVersionEnum.DSTU2) {
- JpaConformanceProviderDstu2 confProvider = new JpaConformanceProviderDstu2(fhirServer, fhirSystemDao, daoConfig);
+ JpaConformanceProviderDstu2 confProvider = new JpaConformanceProviderDstu2(fhirServer, fhirSystemDao, jpaStorageSettings);
confProvider.setImplementationDescription("HAPI FHIR DSTU2 Server");
return confProvider;
} else if (fhirVersion == FhirVersionEnum.DSTU3) {
- JpaConformanceProviderDstu3 confProvider = new JpaConformanceProviderDstu3(fhirServer, fhirSystemDao, daoConfig, searchParamRegistry);
+ JpaConformanceProviderDstu3 confProvider = new JpaConformanceProviderDstu3(fhirServer, fhirSystemDao, jpaStorageSettings, searchParamRegistry);
confProvider.setImplementationDescription("HAPI FHIR DSTU3 Server");
return confProvider;
} else if (fhirVersion == FhirVersionEnum.R4) {
- JpaCapabilityStatementProvider confProvider = new JpaCapabilityStatementProvider(fhirServer, fhirSystemDao, daoConfig, searchParamRegistry, theValidationSupport);
+ JpaCapabilityStatementProvider confProvider = new JpaCapabilityStatementProvider(fhirServer, fhirSystemDao, jpaStorageSettings, searchParamRegistry, theValidationSupport);
confProvider.setImplementationDescription("HAPI FHIR R4 Server");
return confProvider;
} else if (fhirVersion == FhirVersionEnum.R4B) {
- JpaCapabilityStatementProvider confProvider = new JpaCapabilityStatementProvider(fhirServer, fhirSystemDao, daoConfig, searchParamRegistry, theValidationSupport);
+ JpaCapabilityStatementProvider confProvider = new JpaCapabilityStatementProvider(fhirServer, fhirSystemDao, jpaStorageSettings, searchParamRegistry, theValidationSupport);
confProvider.setImplementationDescription("HAPI FHIR R4B Server");
return confProvider;
} else if (fhirVersion == FhirVersionEnum.R5) {
- JpaCapabilityStatementProvider confProvider = new JpaCapabilityStatementProvider(fhirServer, fhirSystemDao, daoConfig, searchParamRegistry, theValidationSupport);
+ JpaCapabilityStatementProvider confProvider = new JpaCapabilityStatementProvider(fhirServer, fhirSystemDao, jpaStorageSettings, searchParamRegistry, theValidationSupport);
confProvider.setImplementationDescription("HAPI FHIR R5 Server");
return confProvider;
} else {
diff --git a/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR5IT.java b/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR5IT.java
index 87e0121..8ecfb73 100644
--- a/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR5IT.java
+++ b/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR5IT.java
@@ -37,7 +37,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
"spring.datasource.url=jdbc:h2:mem:dbr5",
"hapi.fhir.fhir_version=r5",
"hapi.fhir.subscription.websocket_enabled=true",
- "hapi.fhir.subscription.websocket_enabled=true",
+ "hapi.fhir.subscription.websocket_enabled=true"
})
public class ExampleServerR5IT {
@@ -45,7 +45,10 @@ public class ExampleServerR5IT {
private IGenericClient ourClient;
private FhirContext ourCtx;
- @LocalServerPort
+ public static final String SUBSCRIPTION_TOPIC_TEST_URL = "http://example.com/topic/test";
+
+
+ @LocalServerPort
private int port;
@@ -64,32 +67,62 @@ public class ExampleServerR5IT {
@Test
public void testWebsocketSubscription() throws Exception {
-
+ String endpoint = "ws://localhost:" + port + "/websocket";
/*
- * Create topic (will be contained in subscription)
+ * Create topic
*/
SubscriptionTopic topic = new SubscriptionTopic();
- topic.setId("#1");
- topic.getResourceTriggerFirstRep().getQueryCriteria().setCurrent("Observation?status=final");
- /*
+ topic.setUrl(SUBSCRIPTION_TOPIC_TEST_URL);
+ topic.setStatus(Enumerations.PublicationStatus.ACTIVE);
+ SubscriptionTopic.SubscriptionTopicResourceTriggerComponent trigger = topic.addResourceTrigger();
+ trigger.setResource("Observation");
+ trigger.addSupportedInteraction(SubscriptionTopic.InteractionTrigger.CREATE);
+ trigger.addSupportedInteraction(SubscriptionTopic.InteractionTrigger.UPDATE);
+
+ ourClient.create().resource(topic).execute();
+
+ waitForSize(1, () -> ourClient
+ .search()
+ .forResource(SubscriptionTopic.class)
+ .where(Subscription.STATUS.exactly().code("active"))
+ .cacheControl(
+ new CacheControlDirective()
+ .setNoCache(true))
+ .returnBundle(Bundle.class)
+ .execute()
+ .getEntry()
+ .size());
+
+ /*
* Create subscription
*/
Subscription subscription = new Subscription();
- subscription.getContained().add(topic);
- subscription.setTopic("#1");
+
+ subscription.setTopic(SUBSCRIPTION_TOPIC_TEST_URL);
subscription.setReason("Monitor new neonatal function (note, age will be determined by the monitor)");
subscription.setStatus(Enumerations.SubscriptionStatusCodes.REQUESTED);
subscription.getChannelType()
.setSystem("http://terminology.hl7.org/CodeSystem/subscription-channel-type")
.setCode("websocket");
- subscription.setContentType("application/json");
+ subscription.setContentType("application/fhir+json");
+ subscription.setEndpoint(endpoint);
MethodOutcome methodOutcome = ourClient.create().resource(subscription).execute();
IIdType mySubscriptionId = methodOutcome.getId();
// Wait for the subscription to be activated
- waitForSize(1, () -> ourClient.search().forResource(Subscription.class).where(Subscription.STATUS.exactly().code("active")).cacheControl(new CacheControlDirective().setNoCache(true)).returnBundle(Bundle.class).execute().getEntry().size());
+ waitForSize(1, () -> ourClient
+ .search()
+ .forResource(Subscription.class)
+ .where(Subscription.STATUS.exactly().code("active"))
+ .cacheControl(
+ new CacheControlDirective()
+ .setNoCache(true))
+ .returnBundle(Bundle.class)
+ .execute()
+ .getEntry()
+ .size());
/*
* Attach websocket
@@ -99,8 +132,9 @@ public class ExampleServerR5IT {
SocketImplementation mySocketImplementation = new SocketImplementation(mySubscriptionId.getIdPart(), EncodingEnum.JSON);
myWebSocketClient.start();
- URI echoUri = new URI("ws://localhost:" + port + "/websocket");
- ClientUpgradeRequest request = new ClientUpgradeRequest();
+
+ URI echoUri = new URI(endpoint);
+ ClientUpgradeRequest request = new ClientUpgradeRequest();
ourLog.info("Connecting to : {}", echoUri);
Future connection = myWebSocketClient.connect(mySocketImplementation, echoUri, request);
Session session = connection.get(2, TimeUnit.SECONDS);