Merge branch 'master' of ssh://github.com/hapifhir/hapi-fhir-jpaserver-starter
This commit is contained in:
@@ -30,6 +30,7 @@ public class AppProperties {
|
||||
private Boolean allow_override_default_search_params = 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;
|
||||
@@ -66,6 +67,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;
|
||||
|
||||
@@ -264,6 +268,14 @@ public class AppProperties {
|
||||
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;
|
||||
}
|
||||
@@ -432,6 +444,23 @@ public class AppProperties {
|
||||
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;
|
||||
|
||||
@@ -2,6 +2,7 @@ package ca.uhn.fhir.jpa.starter;
|
||||
|
||||
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.config.DaoConfig;
|
||||
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,74 +52,61 @@ import org.springframework.http.HttpHeaders;
|
||||
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 org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(BaseJpaRestfulServer.class);
|
||||
|
||||
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> 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 {
|
||||
@@ -159,14 +154,14 @@ public class BaseJpaRestfulServer extends RestfulServer {
|
||||
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 {
|
||||
@@ -389,5 +384,7 @@ public class BaseJpaRestfulServer extends RestfulServer {
|
||||
}
|
||||
|
||||
daoConfig.getModelConfig().setNormalizedQuantitySearchLevel(appProperties.getNormalized_quantity_search_level());
|
||||
|
||||
daoConfig.getModelConfig().setIndexOnContainedResources(appProperties.getEnable_index_contained_resource());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,4 +183,4 @@ public class EnvironmentHelper {
|
||||
aBase.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -61,6 +61,10 @@ public class FhirServerConfigCommon {
|
||||
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 class FhirServerConfigCommon {
|
||||
}
|
||||
|
||||
modelConfig.setNormalizedQuantitySearchLevel(appProperties.getNormalized_quantity_search_level());
|
||||
|
||||
modelConfig.setIndexOnContainedResources(appProperties.getEnable_index_contained_resource());
|
||||
return modelConfig;
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
|
||||
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();
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
|
||||
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 class FhirServerConfigDstu3 extends BaseJavaConfigDstu3 {
|
||||
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));
|
||||
|
||||
@@ -12,6 +12,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
|
||||
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();
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
|
||||
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 class FhirServerConfigR5 extends BaseJavaConfigR5 {
|
||||
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));
|
||||
|
||||
Reference in New Issue
Block a user