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()