4 Deployment Details

This section describes the details of the HDR FHIR Server deployment.

4.1 Install files

The HDR FHIR Server module is packaged as a deployable web application (.war) file. The war file is distributed along with the HDR 8.1 installation binary. Once installed, FHIR resources are exposed as a set of REST endpoints.

The other component, the FHIR command line tool, is available under the HDR HOME directory on the middle tier. Refer to Chapter 7, "FHIR Command-Line Utility" section for more details.

4.2 FHIR Server Base URL and REST Endpoints

FHIR REST APIs can be accessed using the base URL as show below:

http://HOSTNAME:PORT/oracle-fhir-server/fhir

A specific resource can be accessed using the URL format:

<BASE_URL>/<resourceName>

For example, to access the &rsquor;Patient' resource, use the following URL:

http://HOSTNAME:PORT/oracle-fhir-server/fhir/Patient

For the complete list of resources and their corresponding URLs, see Chapter 8, "Working with FHIR REST APIs".

4.3 Configuration Files

Runtime behavior and logging are controlled using configuration files.

4.3.1 Properties File

The runtime behavior of the FHIR JPA server can be managed using the hdr_fhir.properties file: <HDR_DOMAIN>/config/fhir/hdr_fhir.properties.

Example 4-1 hdr_fhir.properties file

# Supported FHIR version
fhir_version=R4
#below entries are for capability statement
metadata.implementation.description=Oracle FHIR Server
metadata.software.name=Oracle FHIR Server
metadata.publisher=Oracle FHIR Server
# true or false
metadata.resource.count.enabled=false
 
# This is the address that the FHIR server will report as its own address.
# If this server will be deployed (for example) to an internet accessible
# server, put the DNS name of that server here.
 
server_address=http://HOSTNAME:PORT/oracle-fhir-server/fhir
server.base=/oracle-fhir-server/fhir
 
default_encoding=JSON
#resource compression setting - if no value set, server defaults to compression enabled.
resource_compression_enabled=true
etag_support=ENABLED
reuse_cached_search_results_millis=-1
default_page_size=20
max_page_size=200
allow_override_default_search_params=true
allow_contains_searches=true
allow_multiple_delete=true
allow_external_references=true
allow_cascading_deletes=true
allow_placeholder_references=true
expunge_enabled=true
persistence_unit_name=FHIR_PU
logger.name=fhirtest.access
logger.format=Path[${servletPath}] Source[${requestHeader.x-forwarded-for}] Operation[${operationType} ${operationName} ${idOrResourceName}] UA[${requestHeader.user-agent}] Params[${requestParameters}] ResponseEncoding[${responseEncodingNoDefault}]
logger.error_format=ERROR - ${requestVerb} ${requestUrl}
logger.log_exceptions=true
 
server.name=HDR FHIR Server
server.id=home
test.port=
 
###################################################
# Validation
###################################################
# Should all incoming requests be validated
validation.requests.enabled=false
# Should outgoing responses be validated
validation.responses.enabled=false
 
###################################################
# Search Features
###################################################
filter_search.enabled=true
graphql.enabled=true
 
###################################################
# Supported Resources
###################################################
# Enable the following property if you want to customize the
# list of resources that is supported by the server (i.e. to
# disable specific resources)
#supported_resource_types=Patient,Observation,Encounter

###################################################
# Database Settings
###################################################
hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
hibernate.search.model_mapping=ca.uhn.fhir.jpa.search.LuceneSearchMappingFactory
hibernate.format_sql=false
hibernate.show_sql=false
#hibernate.hbm2ddl.auto=update
hibernate.hbm2ddl.auto=none
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
hibernate.search.default.directory_provider=filesystem
hibernate.search.default.indexBase=target/lucenefiles
hibernate.search.lucene_version=LUCENE_CURRENT
tester.config.refuse_to_fetch_third_party_urls=false
hibernate.search.autoregister_listeners=false
hibernate.search.indexing_strategy=manual
hibernate.search.default.worker.execution=async
 
##################################################
# Binary Storage Operations
##################################################
binary_storage.enabled=true
 
##################################################
# CORS Settings
##################################################
cors.enabled=true
cors.allowCredentials=true
# Supports multiple, comma separated allowed origin entries
# cors.allowed_origin=http://localhost:8080,https://localhost:8080,https://fhirtest.uhn.ca
cors.allow_origin=*
 
##################################################
# Allowed Bundle Types for persistence (defaults are: COLLECTION,DOCUMENT,MESSAGE)
##################################################
#allowed_bundle_types=COLLECTION,DOCUMENT,MESSAGE,TRANSACTION,TRANSACTIONRESPONSE,BATCH,BATCHRESPONSE,HISTORY,SEARCHSET
 
##################################################
# Subscriptions
##################################################
 
# Enable REST Hook Subscription Channel
subscription.resthook.enabled=true
 
# Enable Email Subscription Channel
subscription.email.enabled=false
email.enabled=false
email.from=some@test.com
email.host=
email.port=0
email.username=
email.password=
 
# Enable Websocket Subscription Channel
subscription.websocket.enabled=false
# Specify the JNDI data source name where HDR tables are created.
datasource.jndi_name=jdbc/HdrDataSource
 
# Enable/disable OAuth based API access (for easier dev/QA testing)
# Shouldn't use this property in production
oauth.access.enabled=false
#below properties are required for FHIR API access using oath token
oath.token.issuer=https://dev-t9brtcqa.auth0.com/
oath.token.audience=https://fhir-hdr.auth.com/api/v2/
#FHIR Server resource access settings
hdr.fhir.scopes=fhir.admin,fhir.users,fhir.users.restricted
#scopes and access rights
fhir.admin=read,create,update,delete
fhir.users=read,create
fhir.users.restricted=read
#note: add more if needed
#scopes and allowed fhir resources
fhir.admin.allowedapis=ALL
fhir.users.allowedapis=ResearchStudy
fhir.users.restricted.allowedapis=Patient, Observation, AllergyIntolerance, Medication, Condition, Procedure, Immunization
#fhir.users.finance.allowedapis=Patient, Practitioner, Claim, ClaimResponse, InsurancePlan
#fhir.users.clinical.allowedapis=
#note: add more if needed
 
#below properties that starts with audit.* are specific to auditing module of oracle fhir infrastructure
audit.enabled=true
#audit storage type - for now FILE or DB. this needs to be extended for kafka etc
audit.datastore.type=FILE
audit.savemessagepayload.enabled=false
#auditing standard. this can be either a custom format or standard fhir AuditEvent(ATNA equivalent) resource
audit.standard=CUSTOM
# Just to capture timing log. Only for Testing performace, not required to enable this always.By defaults it is false.
response_timing_log_enabled=false

4.3.2 Log Configurations

HDR FHIR has several logging mechanisms that each serve a distinct purpose. These mechanisms are described in the table below. Oracle HDR FHIR uses the log4j logging framework to emit these logs. These logs are generated at runtime by all components of the FHIR. The location of the log4j.properties is: <HDR_DOMAIN>/config/fhir/ log4j.properties.

Table 4-1 Log files

Log File Purpose Retention

Application log

<HDR_DOMAIN>/logs/ hdr-fhir.log

Application Logging is a traditional file-based log of events and internal processing details of Oracle HDR FHIR. These logs are useful for troubleshooting. Application logs can be enabled and disabled at runtime by modifying the log4j properties file.

Logs are rotated and compressed on a Time basis, although this can be configured using the log4j.properties file.

Audit Log

<HDR_DOMAIN>/logs/ audit-hdr-fhir.log

The audit log is intended to record actions taken by users. This log can be enabled or disabled using ”audit.enabled” property defined in the hdr_fhir.properties file.

Logs are rotated and compressed on a Time basis, although this can be configured using log4j.properties file.