diff --git a/pom.xml b/pom.xml
index 5d8d98a76a7..03ed67c2ffd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,8 +14,7 @@
ca.uhn.hapi.fhir
hapi-fhir
-
- 5.3.0
+ 5.4.0
hapi-fhir-jpaserver-starter
diff --git a/src/main/java/ca/uhn/fhir/jpa/mdm/MdmConfig.java b/src/main/java/ca/uhn/fhir/jpa/mdm/MdmConfig.java
index b14c7c4d538..be1757198bd 100644
--- a/src/main/java/ca/uhn/fhir/jpa/mdm/MdmConfig.java
+++ b/src/main/java/ca/uhn/fhir/jpa/mdm/MdmConfig.java
@@ -7,7 +7,7 @@
import ca.uhn.fhir.mdm.api.IMdmSettings;
import ca.uhn.fhir.mdm.rules.config.MdmRuleValidator;
import ca.uhn.fhir.mdm.rules.config.MdmSettings;
-import ca.uhn.fhir.rest.server.util.ISearchParamRetriever;
+import ca.uhn.fhir.rest.server.util.ISearchParamRegistry;
import com.google.common.base.Charsets;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,17 +29,17 @@
@Import({MdmConsumerConfig.class, MdmSubmitterConfig.class})
public class MdmConfig {
- @Bean
- MdmRuleValidator mdmRuleValidator(FhirContext theFhirContext, ISearchParamRetriever theSearchParamRetriever) {
- return new MdmRuleValidator(theFhirContext, theSearchParamRetriever);
- }
+ @Bean
+ MdmRuleValidator mdmRuleValidator(FhirContext theFhirContext, ISearchParamRegistry theSearchParamRegistry) {
+ return new MdmRuleValidator(theFhirContext, theSearchParamRegistry);
+ }
- @Bean
- IMdmSettings mdmSettings(@Autowired MdmRuleValidator theMdmRuleValidator, AppProperties appProperties) throws IOException {
- DefaultResourceLoader resourceLoader = new DefaultResourceLoader();
- Resource resource = resourceLoader.getResource("mdm-rules.json");
- String json = IOUtils.toString(resource.getInputStream(), Charsets.UTF_8);
- return new MdmSettings(theMdmRuleValidator).setEnabled(appProperties.getMdm_enabled()).setScriptText(json);
- }
+ @Bean
+ IMdmSettings mdmSettings(@Autowired MdmRuleValidator theMdmRuleValidator, AppProperties appProperties) throws IOException {
+ DefaultResourceLoader resourceLoader = new DefaultResourceLoader();
+ Resource resource = resourceLoader.getResource("mdm-rules.json");
+ String json = IOUtils.toString(resource.getInputStream(), Charsets.UTF_8);
+ return new MdmSettings(theMdmRuleValidator).setEnabled(appProperties.getMdm_enabled()).setScriptText(json);
+ }
}
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 395515640b0..8a00b715630 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java
@@ -31,6 +31,7 @@ public class AppProperties {
private Boolean allow_placeholder_references = true;
private Boolean auto_create_placeholder_reference_targets = false;
private Boolean enable_index_missing_fields = false;
+ private Boolean enable_index_contained_resource = false;
private Boolean enable_repository_validating_interceptor = false;
private Boolean enforce_referential_integrity_on_delete = true;
private Boolean enforce_referential_integrity_on_write = true;
@@ -67,6 +68,9 @@ public class AppProperties {
private Boolean lastn_enabled = false;
private NormalizedQuantitySearchLevel normalized_quantity_search_level = NormalizedQuantitySearchLevel.NORMALIZED_QUANTITY_SEARCH_NOT_SUPPORTED;
+ private Integer search_coord_core_pool_size = 20;
+ private Integer search_coord_max_pool_size = 100;
+ private Integer search_coord_queue_capacity = 200;
private Boolean use_apache_address_strategy = false;
private Boolean use_apache_address_strategy_https = false;
@@ -273,6 +277,14 @@ public void setEnable_index_missing_fields(Boolean enable_index_missing_fields)
this.enable_index_missing_fields = enable_index_missing_fields;
}
+ public Boolean getEnable_index_contained_resource() {
+ return enable_index_contained_resource;
+ }
+
+ public void setEnable_index_contained_resource(Boolean enable_index_contained_resource) {
+ this.enable_index_contained_resource = enable_index_contained_resource;
+ }
+
public Boolean getEnable_repository_validating_interceptor() {
return enable_repository_validating_interceptor;
}
@@ -441,6 +453,23 @@ public void setNormalized_quantity_search_level(NormalizedQuantitySearchLevel no
this.normalized_quantity_search_level = normalized_quantity_search_level;
}
+ public Integer getSearch_coord_core_pool_size() { return search_coord_core_pool_size; }
+
+ public void setSearch_coord_core_pool_size(Integer search_coord_core_pool_size) {
+ this.search_coord_core_pool_size = search_coord_core_pool_size;
+ }
+
+ public Integer getSearch_coord_max_pool_size() { return search_coord_max_pool_size; }
+
+ public void setSearch_coord_max_pool_size(Integer search_coord_max_pool_size) {
+ this.search_coord_max_pool_size = search_coord_max_pool_size;
+ }
+
+ public Integer getSearch_coord_queue_capacity() { return search_coord_queue_capacity; }
+
+ public void setSearch_coord_queue_capacity(Integer search_coord_queue_capacity) {
+ this.search_coord_queue_capacity = search_coord_queue_capacity;
+ }
public static class Cors {
private Boolean allow_Credentials = true;
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/BaseJpaRestfulServer.java b/src/main/java/ca/uhn/fhir/jpa/starter/BaseJpaRestfulServer.java
index 0333e713d19..8ba131f1335 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/BaseJpaRestfulServer.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/BaseJpaRestfulServer.java
@@ -2,6 +2,7 @@
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.FhirVersionEnum;
+import ca.uhn.fhir.context.support.IValidationSupport;
import ca.uhn.fhir.cql.common.provider.CqlProviderLoader;
import ca.uhn.fhir.interceptor.api.IInterceptorBroadcaster;
import ca.uhn.fhir.interceptor.api.IInterceptorService;
@@ -9,31 +10,38 @@
import ca.uhn.fhir.jpa.api.dao.DaoRegistry;
import ca.uhn.fhir.jpa.api.dao.IFhirSystemDao;
import ca.uhn.fhir.jpa.binstore.BinaryStorageInterceptor;
-import ca.uhn.fhir.jpa.bulk.provider.BulkDataExportProvider;
+import ca.uhn.fhir.jpa.bulk.export.provider.BulkDataExportProvider;
import ca.uhn.fhir.jpa.interceptor.CascadingDeleteInterceptor;
import ca.uhn.fhir.jpa.packages.IPackageInstallerSvc;
-import ca.uhn.fhir.jpa.packages.PackageInstallOutcomeJson;
import ca.uhn.fhir.jpa.packages.PackageInstallationSpec;
import ca.uhn.fhir.jpa.partition.PartitionManagementProvider;
-import ca.uhn.fhir.jpa.provider.*;
+import ca.uhn.fhir.jpa.provider.GraphQLProvider;
+import ca.uhn.fhir.jpa.provider.IJpaSystemProvider;
+import ca.uhn.fhir.jpa.provider.JpaCapabilityStatementProvider;
+import ca.uhn.fhir.jpa.provider.JpaConformanceProviderDstu2;
+import ca.uhn.fhir.jpa.provider.SubscriptionTriggeringProvider;
+import ca.uhn.fhir.jpa.provider.TerminologyUploaderProvider;
import ca.uhn.fhir.jpa.provider.dstu3.JpaConformanceProviderDstu3;
-import ca.uhn.fhir.jpa.provider.r4.JpaConformanceProviderR4;
-import ca.uhn.fhir.jpa.provider.r5.JpaConformanceProviderR5;
import ca.uhn.fhir.jpa.search.DatabaseBackedPagingProvider;
-import ca.uhn.fhir.jpa.searchparam.registry.ISearchParamRegistry;
import ca.uhn.fhir.jpa.subscription.util.SubscriptionDebugLogInterceptor;
import ca.uhn.fhir.narrative.DefaultThymeleafNarrativeGenerator;
import ca.uhn.fhir.narrative.INarrativeGenerator;
import ca.uhn.fhir.narrative2.NullNarrativeGenerator;
+import ca.uhn.fhir.rest.server.ApacheProxyAddressStrategy;
import ca.uhn.fhir.rest.server.ETagSupportEnum;
import ca.uhn.fhir.rest.server.HardcodedServerAddressStrategy;
-import ca.uhn.fhir.rest.server.ApacheProxyAddressStrategy;
import ca.uhn.fhir.rest.server.IncomingRequestAddressStrategy;
import ca.uhn.fhir.rest.server.RestfulServer;
-import ca.uhn.fhir.rest.server.interceptor.*;
+import ca.uhn.fhir.rest.server.interceptor.CorsInterceptor;
+import ca.uhn.fhir.rest.server.interceptor.FhirPathFilterInterceptor;
+import ca.uhn.fhir.rest.server.interceptor.LoggingInterceptor;
+import ca.uhn.fhir.rest.server.interceptor.RequestValidatingInterceptor;
+import ca.uhn.fhir.rest.server.interceptor.ResponseHighlighterInterceptor;
+import ca.uhn.fhir.rest.server.interceptor.ResponseValidatingInterceptor;
import ca.uhn.fhir.rest.server.interceptor.partition.RequestTenantPartitionInterceptor;
import ca.uhn.fhir.rest.server.provider.ResourceProviderFactory;
import ca.uhn.fhir.rest.server.tenant.UrlBaseTenantIdentificationStrategy;
+import ca.uhn.fhir.rest.server.util.ISearchParamRegistry;
import ca.uhn.fhir.validation.IValidatorModule;
import ca.uhn.fhir.validation.ResultSeverityEnum;
import com.google.common.base.Strings;
@@ -44,73 +52,60 @@
import org.springframework.web.cors.CorsConfiguration;
import javax.servlet.ServletException;
-import java.util.*;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
import java.util.stream.Collectors;
public class BaseJpaRestfulServer extends RestfulServer {
+ private static final long serialVersionUID = 1L;
@Autowired
DaoRegistry daoRegistry;
-
@Autowired
DaoConfig daoConfig;
-
@Autowired
ISearchParamRegistry searchParamRegistry;
-
@Autowired
IFhirSystemDao fhirSystemDao;
-
@Autowired
ResourceProviderFactory resourceProviders;
-
@Autowired
IJpaSystemProvider jpaSystemProvider;
-
@Autowired
IInterceptorBroadcaster interceptorBroadcaster;
-
@Autowired
DatabaseBackedPagingProvider databaseBackedPagingProvider;
-
@Autowired
IInterceptorService interceptorService;
-
@Autowired
IValidatorModule validatorModule;
-
@Autowired
Optional graphQLProvider;
-
@Autowired
BulkDataExportProvider bulkDataExportProvider;
-
@Autowired
PartitionManagementProvider partitionManagementProvider;
-
@Autowired
BinaryStorageInterceptor binaryStorageInterceptor;
-
@Autowired
IPackageInstallerSvc packageInstallerSvc;
-
@Autowired
AppProperties appProperties;
-
@Autowired
ApplicationContext myApplicationContext;
-
@Autowired(required = false)
IRepositoryValidationInterceptorFactory factory;
-
// These are set only if the features are enabled
private CqlProviderLoader cqlProviderLoader;
+ @Autowired
+ private IValidationSupport myValidationSupport;
public BaseJpaRestfulServer() {
}
- private static final long serialVersionUID = 1L;
-
@SuppressWarnings("unchecked")
@Override
protected void initialize() throws ServletException {
@@ -158,14 +153,14 @@ protected void initialize() throws ServletException {
setServerConformanceProvider(confProvider);
} else if (fhirVersion == FhirVersionEnum.R4) {
- JpaConformanceProviderR4 confProvider = new JpaConformanceProviderR4(this, fhirSystemDao,
- daoConfig, searchParamRegistry);
+ JpaCapabilityStatementProvider confProvider = new JpaCapabilityStatementProvider(this, fhirSystemDao,
+ daoConfig, searchParamRegistry, myValidationSupport);
confProvider.setImplementationDescription("HAPI FHIR R4 Server");
setServerConformanceProvider(confProvider);
} else if (fhirVersion == FhirVersionEnum.R5) {
- JpaConformanceProviderR5 confProvider = new JpaConformanceProviderR5(this, fhirSystemDao,
- daoConfig, searchParamRegistry);
+ JpaCapabilityStatementProvider confProvider = new JpaCapabilityStatementProvider(this, fhirSystemDao,
+ daoConfig, searchParamRegistry, myValidationSupport);
confProvider.setImplementationDescription("HAPI FHIR R5 Server");
setServerConformanceProvider(confProvider);
} else {
@@ -384,5 +379,7 @@ protected void initialize() throws ServletException {
}
daoConfig.getModelConfig().setNormalizedQuantitySearchLevel(appProperties.getNormalized_quantity_search_level());
+
+ daoConfig.getModelConfig().setIndexOnContainedResources(appProperties.getEnable_index_contained_resource());
}
}
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/EnvironmentHelper.java b/src/main/java/ca/uhn/fhir/jpa/starter/EnvironmentHelper.java
index 2efe064e9fd..75db0f8c957 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/EnvironmentHelper.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/EnvironmentHelper.java
@@ -183,4 +183,4 @@ private static void addAll(Map aBase, Map aToBeA
aBase.put(entry.getKey(), entry.getValue());
}
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java
index e73ce18f201..55eae25622e 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigCommon.java
@@ -61,6 +61,10 @@ public FhirServerConfigCommon(AppProperties appProperties) {
if (appProperties.getSubscription().getEmail() != null) {
ourLog.info("Email subscriptions enabled");
}
+
+ if (appProperties.getEnable_index_contained_resource() == Boolean.TRUE) {
+ ourLog.info("Indexed on contained resource enabled");
+ }
}
/**
@@ -163,6 +167,8 @@ public ModelConfig modelConfig(AppProperties appProperties) {
}
modelConfig.setNormalizedQuantitySearchLevel(appProperties.getNormalized_quantity_search_level());
+
+ modelConfig.setIndexOnContainedResources(appProperties.getEnable_index_contained_resource());
return modelConfig;
}
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu2.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu2.java
index 5674d2ab518..6e26d41fafe 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu2.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu2.java
@@ -13,6 +13,7 @@
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import javax.annotation.PostConstruct;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
@@ -31,6 +32,19 @@ public class FhirServerConfigDstu2 extends BaseJavaConfigDstu2 {
@Autowired
AppProperties appProperties;
+ @PostConstruct
+ public void initSettings() {
+ if(appProperties.getSearch_coord_core_pool_size() != null) {
+ setSearchCoordCorePoolSize(appProperties.getSearch_coord_core_pool_size());
+ }
+ if(appProperties.getSearch_coord_max_pool_size() != null) {
+ setSearchCoordMaxPoolSize(appProperties.getSearch_coord_max_pool_size());
+ }
+ if(appProperties.getSearch_coord_queue_capacity() != null) {
+ setSearchCoordQueueCapacity(appProperties.getSearch_coord_queue_capacity());
+ }
+ }
+
@Override
public DatabaseBackedPagingProvider databaseBackedPagingProvider() {
DatabaseBackedPagingProvider pagingProvider = super.databaseBackedPagingProvider();
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu3.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu3.java
index 07406b283fd..a10ecb4a637 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu3.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu3.java
@@ -11,6 +11,7 @@
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import javax.annotation.PostConstruct;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
@@ -29,6 +30,20 @@ public class FhirServerConfigDstu3 extends BaseJavaConfigDstu3 {
@Autowired
AppProperties appProperties;
+ @PostConstruct
+ public void initSettings() {
+ if(appProperties.getSearch_coord_core_pool_size() != null) {
+ setSearchCoordCorePoolSize(appProperties.getSearch_coord_core_pool_size());
+ }
+ if(appProperties.getSearch_coord_max_pool_size() != null) {
+ setSearchCoordMaxPoolSize(appProperties.getSearch_coord_max_pool_size());
+ }
+ if(appProperties.getSearch_coord_queue_capacity() != null) {
+ setSearchCoordQueueCapacity(appProperties.getSearch_coord_queue_capacity());
+ }
+ }
+
+
@Override
public DatabaseBackedPagingProvider databaseBackedPagingProvider() {
DatabaseBackedPagingProvider pagingProvider = super.databaseBackedPagingProvider();
@@ -68,7 +83,12 @@ public JpaTransactionManager hapiTransactionManager(EntityManagerFactory entityM
public ElasticsearchSvcImpl elasticsearchSvc() {
if (EnvironmentHelper.isElasticsearchEnabled(configurableEnvironment)) {
String elasticsearchUrl = EnvironmentHelper.getElasticsearchServerUrl(configurableEnvironment);
- String elasticsearchHost = elasticsearchUrl.substring(elasticsearchUrl.indexOf("://")+3, elasticsearchUrl.lastIndexOf(":"));
+ String elasticsearchHost;
+ if (elasticsearchUrl.startsWith("http")) {
+ elasticsearchHost = elasticsearchUrl.substring(elasticsearchUrl.indexOf("://") + 3, elasticsearchUrl.lastIndexOf(":"));
+ } else {
+ elasticsearchHost = elasticsearchUrl.substring(0, elasticsearchUrl.indexOf(":"));
+ }
String elasticsearchUsername = EnvironmentHelper.getElasticsearchServerUsername(configurableEnvironment);
String elasticsearchPassword = EnvironmentHelper.getElasticsearchServerPassword(configurableEnvironment);
int elasticsearchPort = Integer.parseInt(elasticsearchUrl.substring(elasticsearchUrl.lastIndexOf(":")+1));
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR4.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR4.java
index 31c0dcc623a..a53b0578711 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR4.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR4.java
@@ -12,6 +12,7 @@
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import javax.annotation.PostConstruct;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
@@ -31,6 +32,19 @@ public class FhirServerConfigR4 extends BaseJavaConfigR4 {
@Autowired
AppProperties appProperties;
+ @PostConstruct
+ public void initSettings() {
+ if(appProperties.getSearch_coord_core_pool_size() != null) {
+ setSearchCoordCorePoolSize(appProperties.getSearch_coord_core_pool_size());
+ }
+ if(appProperties.getSearch_coord_max_pool_size() != null) {
+ setSearchCoordMaxPoolSize(appProperties.getSearch_coord_max_pool_size());
+ }
+ if(appProperties.getSearch_coord_queue_capacity() != null) {
+ setSearchCoordQueueCapacity(appProperties.getSearch_coord_queue_capacity());
+ }
+ }
+
@Override
public DatabaseBackedPagingProvider databaseBackedPagingProvider() {
DatabaseBackedPagingProvider pagingProvider = super.databaseBackedPagingProvider();
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR5.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR5.java
index 6e5bd98ae62..2c6d72eaa46 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR5.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR5.java
@@ -14,6 +14,7 @@
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import javax.annotation.PostConstruct;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
@@ -32,6 +33,19 @@ public class FhirServerConfigR5 extends BaseJavaConfigR5 {
@Autowired
AppProperties appProperties;
+ @PostConstruct
+ public void initSettings() {
+ if(appProperties.getSearch_coord_core_pool_size() != null) {
+ setSearchCoordCorePoolSize(appProperties.getSearch_coord_core_pool_size());
+ }
+ if(appProperties.getSearch_coord_max_pool_size() != null) {
+ setSearchCoordMaxPoolSize(appProperties.getSearch_coord_max_pool_size());
+ }
+ if(appProperties.getSearch_coord_queue_capacity() != null) {
+ setSearchCoordQueueCapacity(appProperties.getSearch_coord_queue_capacity());
+ }
+ }
+
@Override
public DatabaseBackedPagingProvider databaseBackedPagingProvider() {
DatabaseBackedPagingProvider pagingProvider = super.databaseBackedPagingProvider();
@@ -71,7 +85,12 @@ public JpaTransactionManager hapiTransactionManager(EntityManagerFactory entityM
public ElasticsearchSvcImpl elasticsearchSvc() {
if (EnvironmentHelper.isElasticsearchEnabled(configurableEnvironment)) {
String elasticsearchUrl = EnvironmentHelper.getElasticsearchServerUrl(configurableEnvironment);
- String elasticsearchHost = elasticsearchUrl.substring(elasticsearchUrl.indexOf("://")+3, elasticsearchUrl.lastIndexOf(":"));
+ String elasticsearchHost;
+ if (elasticsearchUrl.startsWith("http")) {
+ elasticsearchHost = elasticsearchUrl.substring(elasticsearchUrl.indexOf("://") + 3, elasticsearchUrl.lastIndexOf(":"));
+ } else {
+ elasticsearchHost = elasticsearchUrl.substring(0, elasticsearchUrl.indexOf(":"));
+ }
String elasticsearchUsername = EnvironmentHelper.getElasticsearchServerUsername(configurableEnvironment);
String elasticsearchPassword = EnvironmentHelper.getElasticsearchServerPassword(configurableEnvironment);
int elasticsearchPort = Integer.parseInt(elasticsearchUrl.substring(elasticsearchUrl.lastIndexOf(":")+1));
diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml
index 5a0e0e98827..c2f6ba28b0b 100644
--- a/src/main/resources/application.yaml
+++ b/src/main/resources/application.yaml
@@ -6,24 +6,28 @@ spring:
password: null
driverClassName: org.h2.Driver
max-active: 15
+
+ # database connection pool size
+ hikari:
+ maximum-pool-size: 10
jpa:
properties:
hibernate.format_sql: false
hibernate.show_sql: false
- # hibernate.dialect: org.hibernate.dialect.h2dialect
- # hibernate.hbm2ddl.auto: update
- # hibernate.jdbc.batch_size: 20
- # hibernate.cache.use_query_cache: false
- # hibernate.cache.use_second_level_cache: false
- # hibernate.cache.use_structured_entries: false
- # hibernate.cache.use_minimal_puts: false
- ### These settings will enable fulltext search with lucene
- # hibernate.search.enabled: true
- # hibernate.search.backend.type: lucene
- # hibernate.search.backend.analysis.configurer: ca.uhn.fhir.jpa.search.HapiLuceneAnalysisConfigurer
- # hibernate.search.backend.directory.type: local-filesystem
- # hibernate.search.backend.directory.root: target/lucenefiles
- # hibernate.search.backend.lucene_version: lucene_current
+# hibernate.dialect: org.hibernate.dialect.h2dialect
+# hibernate.hbm2ddl.auto: update
+# hibernate.jdbc.batch_size: 20
+# hibernate.cache.use_query_cache: false
+# hibernate.cache.use_second_level_cache: false
+# hibernate.cache.use_structured_entries: false
+# hibernate.cache.use_minimal_puts: false
+### These settings will enable fulltext search with lucene
+# hibernate.search.enabled: true
+# hibernate.search.backend.type: lucene
+# hibernate.search.backend.analysis.configurer: ca.uhn.fhir.jpa.search.HapiLuceneAnalysisConfigurer
+# hibernate.search.backend.directory.type: local-filesystem
+# hibernate.search.backend.directory.root: target/lucenefiles
+# hibernate.search.backend.lucene_version: lucene_current
batch:
job:
enabled: false
@@ -31,83 +35,90 @@ hapi:
fhir:
### This is the FHIR version. Choose between, DSTU2, DSTU3, R4 or R5
fhir_version: R4
- ### enable to use the ApacheProxyAddressStrategy which uses X-Forwarded-* headers
- ### to determine the FHIR server address
- # use_apache_address_strategy: false
- ### forces the use of the https:// protocol for the returned server address.
- ### alternatively, it may be set using the X-Forwarded-Proto header.
- # use_apache_address_strategy_https: false
- ### enable to set the Server URL
- # server_address: http://hapi.fhir.org/baseR4
- # defer_indexing_for_codesystems_of_size: 101
- # implementationguides:
- ### example from registry (packages.fhir.org)
- # swiss:
- # name: swiss.mednet.fhir
- # version: 0.8.0
- # example not from registry
- # ips_1_0_0:
- # url: https://build.fhir.org/ig/HL7/fhir-ips/package.tgz
- # name: hl7.fhir.uv.ips
- # version: 1.0.0
- # supported_resource_types:
- # - Patient
- # - Observation
- # allow_cascading_deletes: true
- # allow_contains_searches: true
- # allow_external_references: true
- # allow_multiple_delete: true
- # allow_override_default_search_params: true
- # allow_placeholder_references: true
- # auto_create_placeholder_reference_targets: false
- # cql_enabled: true
- # default_encoding: JSON
- # default_pretty_print: true
- # default_page_size: 20
- # enable_repository_validating_interceptor: false
- # enable_index_missing_fields: false
- # enforce_referential_integrity_on_delete: false
- # enforce_referential_integrity_on_write: false
- # etag_support_enabled: true
- # expunge_enabled: true
- # daoconfig_client_id_strategy: null
- # client_id_strategy: ALPHANUMERIC
- # fhirpath_interceptor_enabled: false
- # filter_search_enabled: true
- # graphql_enabled: true
- # narrative_enabled: true
- # partitioning:
- # allow_references_across_partitions: false
- # partitioning_include_in_search_hashes: false
- cors:
- allow_Credentials: true
- # These are allowed_origin patterns, see: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/cors/CorsConfiguration.html#setAllowedOriginPatterns-java.util.List-
- allowed_origin:
- - '*'
- # logger:
- # error_format: 'ERROR - ${requestVerb} ${requestUrl}'
- # format: >-
- # Path[${servletPath}] Source[${requestHeader.x-forwarded-for}]
- # Operation[${operationType} ${operationName} ${idOrResourceName}]
- # UA[${requestHeader.user-agent}] Params[${requestParameters}]
- # ResponseEncoding[${responseEncodingNoDefault}]
- # log_exceptions: true
- # name: fhirtest.access
- # max_binary_size: 104857600
- # max_page_size: 200
- # retain_cached_searches_mins: 60
- # reuse_cached_search_results_millis: 60000
+### enable to use the ApacheProxyAddressStrategy which uses X-Forwarded-* headers
+### to determine the FHIR server address
+# use_apache_address_strategy: false
+### forces the use of the https:// protocol for the returned server address.
+### alternatively, it may be set using the X-Forwarded-Proto header.
+# use_apache_address_strategy_https: false
+### enable to set the Server URL
+# server_address: http://hapi.fhir.org/baseR4
+# defer_indexing_for_codesystems_of_size: 101
+# implementationguides:
+### example from registry (packages.fhir.org)
+# swiss:
+# name: swiss.mednet.fhir
+# version: 0.8.0
+# example not from registry
+# ips_1_0_0:
+# url: https://build.fhir.org/ig/HL7/fhir-ips/package.tgz
+# name: hl7.fhir.uv.ips
+# version: 1.0.0
+# supported_resource_types:
+# - Patient
+# - Observation
+# allow_cascading_deletes: true
+# allow_contains_searches: true
+# allow_external_references: true
+# allow_multiple_delete: true
+# allow_override_default_search_params: true
+# allow_placeholder_references: true
+# auto_create_placeholder_reference_targets: false
+# cql_enabled: true
+# default_encoding: JSON
+# default_pretty_print: true
+# default_page_size: 20
+# enable_repository_validating_interceptor: false
+# enable_index_missing_fields: false
+# enable_index_contained_resource: false
+# enforce_referential_integrity_on_delete: false
+# enforce_referential_integrity_on_write: false
+# etag_support_enabled: true
+# expunge_enabled: true
+# daoconfig_client_id_strategy: null
+# client_id_strategy: ALPHANUMERIC
+# fhirpath_interceptor_enabled: false
+# filter_search_enabled: true
+# graphql_enabled: true
+# narrative_enabled: true
+# partitioning:
+# allow_references_across_partitions: false
+# partitioning_include_in_search_hashes: false
+ cors:
+ allow_Credentials: true
+ # These are allowed_origin patterns, see: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/cors/CorsConfiguration.html#setAllowedOriginPatterns-java.util.List-
+ allowed_origin:
+ - '*'
+
+ # Search coordinator thread pool sizes
+ search-coord-core-pool-size: 20
+ search-coord-max-pool-size: 100
+ search-coord-queue-capacity: 200
+
+# logger:
+# error_format: 'ERROR - ${requestVerb} ${requestUrl}'
+# format: >-
+# Path[${servletPath}] Source[${requestHeader.x-forwarded-for}]
+# Operation[${operationType} ${operationName} ${idOrResourceName}]
+# UA[${requestHeader.user-agent}] Params[${requestParameters}]
+# ResponseEncoding[${responseEncodingNoDefault}]
+# log_exceptions: true
+# name: fhirtest.access
+# max_binary_size: 104857600
+# max_page_size: 200
+# retain_cached_searches_mins: 60
+# reuse_cached_search_results_millis: 60000
tester:
- home:
- name: Local Tester
- server_address: 'http://localhost:8080/fhir'
- refuse_to_fetch_third_party_urls: false
- fhir_version: R4
- global:
- name: Global Tester
- server_address: "http://hapi.fhir.org/baseR4"
- refuse_to_fetch_third_party_urls: false
- fhir_version: R4
+ home:
+ name: Local Tester
+ server_address: 'http://localhost:8080/fhir'
+ refuse_to_fetch_third_party_urls: false
+ fhir_version: R4
+ global:
+ name: Global Tester
+ server_address: "http://hapi.fhir.org/baseR4"
+ refuse_to_fetch_third_party_urls: false
+ fhir_version: R4
# validation:
# requests_enabled: true
# responses_enabled: true
diff --git a/src/test/java/ca/uhn/fhir/jpa/starter/ElasticsearchLastNR4IT.java b/src/test/java/ca/uhn/fhir/jpa/starter/ElasticsearchLastNR4IT.java
index 902abbec462..2dcf32d6afc 100644
--- a/src/test/java/ca/uhn/fhir/jpa/starter/ElasticsearchLastNR4IT.java
+++ b/src/test/java/ca/uhn/fhir/jpa/starter/ElasticsearchLastNR4IT.java
@@ -60,7 +60,7 @@ public class ElasticsearchLastNR4IT {
private IGenericClient ourClient;
private FhirContext ourCtx;
- private static final String ELASTIC_VERSION = "7.10.1";
+ private static final String ELASTIC_VERSION = "7.10.2";
private static final String ELASTIC_IMAGE = "docker.elastic.co/elasticsearch/elasticsearch:" + ELASTIC_VERSION;
private static ElasticsearchContainer embeddedElastic;
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 52ffb6f2fec..56b7316609f 100644
--- a/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR5IT.java
+++ b/src/test/java/ca/uhn/fhir/jpa/starter/ExampleServerR5IT.java
@@ -67,16 +67,18 @@ public void testCreateAndRead() {
public void testWebsocketSubscription() throws Exception {
/*
- * Create topic
+ * Create topic (will be contained in subscription)
*/
SubscriptionTopic topic = new SubscriptionTopic();
- topic.getResourceTrigger().getQueryCriteria().setCurrent("Observation?status=final");
+ topic.setId("#1");
+ topic.getResourceTriggerFirstRep().getQueryCriteria().setCurrent("Observation?status=final");
/*
* Create subscription
*/
Subscription subscription = new Subscription();
- subscription.getTopic().setResource(topic);
+ subscription.getContained().add(topic);
+ subscription.setTopic("#1");
subscription.setReason("Monitor new neonatal function (note, age will be determined by the monitor)");
subscription.setStatus(Enumerations.SubscriptionState.REQUESTED);
subscription.getChannelType()